ITPub博客

首页 > 应用开发 > IT综合 > Nagios+centreon做分布式后导致centreon_storage数据库数据重复

Nagios+centreon做分布式后导致centreon_storage数据库数据重复

原创 IT综合 作者:Michael_DD 时间:2014-09-19 15:07:03 0 删除 编辑
Nagios+centreon做分布式后导致centreon_storage数据库数据重复

Centreon增加poller后,出现centreon_storage数据库中log_archive_host 与 log_archive_service 表数据重复,report图表不准确。



原因:节点直接从主节点拷贝,没有关闭centreon软件,节点上不需要centreon软件


report报告centreon提取数据脚本源代码

host

点击(此处)折叠或打开

  1. SELECT sum(`UPnbEvent`) as UP_A, sum(`UPTimeScheduled`) as UP_T, \".
  2.                     \" sum(`DOWNnbEvent`) as DOWN_A, sum(`DOWNTimeScheduled`) as DOWN_T, \" .
  3.                     \" sum(`UNREACHABLEnbEvent`) as UNREACHABLE_A, sum(`UNREACHABLETimeScheduled`) as UNREACHABLE_T, \" .
  4.                     \" sum(`UNDETERMINEDTimeScheduled`) as UNDETERMINED_T, \" .
  5.                     \" sum(`MaintenanceTime`) as MAINTENANCE_T \" .
  6.              \"FROM `log_archive_host` \".
  7.              \"WHERE `host_id` = \".$host_id.\" AND `date_start` >= \".$start_date.\" AND `date_end` <= \".$end_date.\" \".
  8.                      \"AND DATE_FORMAT( FROM_UNIXTIME( `date_start`), \'%W\') IN (\".$days_of_week.\") \
service:

点击(此处)折叠或打开

  1. SELECT service_id, sum(`OKTimeScheduled`) as OK_T, sum(`OKnbEvent`) as OK_A, \".
  2.                      \"sum(`WARNINGTimeScheduled`) as WARNING_T, sum(`WARNINGnbEvent`) as WARNING_A, \".
  3.                      \"sum(`UNKNOWNTimeScheduled`) as UNKNOWN_T, sum(`UNKNOWNnbEvent`) as UNKNOWN_A, \".
  4.                      \"sum(`CRITICALTimeScheduled`) as CRITICAL_T, sum(`CRITICALnbEvent`) as CRITICAL_A, \".
  5.                      \"sum(`UNDETERMINEDTimeScheduled`) as UNDETERMINED_T, \".
  6.                     \"sum(`MaintenanceTime`) as MAINTENANCE_T \".
  7.              \"FROM `log_archive_service` \".
  8.              \"WHERE `host_id` = \".$host_id.\" \".
  9.              $oreon->user->access->queryBuilder(\"AND\", \"service_id\", $svcStr) .
  10.              \"AND `date_start` >= \".$start_date.\" AND `date_end` <= \".$end_date.\" \".
  11.                       \"AND DATE_FORMAT( FROM_UNIXTIME( `date_start`), \'%W\') IN (\".$days_of_week.\") \".
  12.              \"GROUP BY `service_id`



处理办法:删除重复数据

点击(此处)折叠或打开

  1. host:

  2. 新建一个临时表host_test1存放重复的数据:

  3. CREATE TABLE host_test1 (
  4.     SELECT
  5.         host_id,
  6.         date_start,
  7.         count(*)
  8.     FROM
  9.         log_archive_host
  10.     GROUP BY
  11.         host_id,
  12.         date_start
  13.     HAVING
  14.         count(*) > 1
  15. )


  16. 新建一个临时表host_test2存放重复的数据:


  17. CREATE TABLE host_test2 (
  18.     SELECT
  19.         max(log_id) as log_idtest
  20.     FROM
  21.         log_archive_host
  22.     WHERE
  23.         (host_id, date_start) IN (
  24.             SELECT
  25.                 host_id,
  26.                 date_start
  27.             FROM
  28.                 host_test1
  29.         )
  30.     GROUP BY
  31.         host_id,
  32.         date_start
  33. )

  34. select * from host_test1;
  35. select * from host_test2;

  36. 删除重复数据
  1. delete from log_archive_host where log_id in(select log_idtest from host_test2);

  2. drop table host_test1
  3. drop table host_test2

  4. 提交会话:
  5. commit




  6. service:

  7. 创建索引:
  8. create index idx_lam_sid_sd on log_archive_service(service_id,date_start)

  9. 新建一个临时表service_test1存放重复的数据:

  10. CREATE TABLE service_test1 (
  11.     SELECT
  12.         service_id,
  13.         date_start,
  14.         count(*)
  15.     FROM
  16.         log_archive_service
  17.     GROUP BY
  18.         service_id,
  19.         date_start
  20.     HAVING
  21.         count(*) > 1
  22. )


  23. 新建一个临时表service_test2存放重复的数据:


  24. CREATE TABLE service_test2 (
  25.     SELECT
  26.         max(log_id) as log_idtest
  27.     FROM
  28.         log_archive_service
  29.     WHERE
  30.         (service_id, date_start) IN (
  31.             SELECT
  32.                 service_id,
  33.                 date_start
  34.             FROM
  35.                 service_test1
  36.         )
  37.     GROUP BY
  38.         service_id,
  39.         date_start
  40. )



  41. select * from service_test1;
  42. select * from service_test2;

  43. 删除重复的数据:
  44. delete from log_archive_service where log_id in(select log_idtest from service_test2);

  45. 删除临时表:
  46. drop table service_test1
  47. drop table service_test2



  48. 提交会话:
  49. commit

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29500582/viewspace-1274249/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-02-22

  • 博文量
    326
  • 访问量
    2671975