Nagios+centreon做分散式後導致centreon_storage資料庫資料重複

Michael_DD發表於2014-09-19
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部落格 ” ,連結:http://blog.itpub.net/29500582/viewspace-1274249/,如需轉載,請註明出處,否則將追究法律責任。

相關文章