Python指令碼實現zabbix5 0告警收斂

2021-10-09 18:16:15 字數 3298 閱讀 8283

注意總結

在多個運維技術分享中都會談及到「告警風暴」這個詞,即在短時間內批量傳送告警資訊,為了避免重複告警以及過濾掉無效告警,免去運維人員檢視重複告警內容的煩惱。於是想辦法對告警資訊進行收斂。

1、將產生的告警事件對應的triggerid(對應乙個觸發器)、actionid(對應告警接收組)、hostip(主機ip)推送到mysql

2、每隔1小時獲取mysql中triggerid、actionid、hostip唯一資料的告警時間,如果告警時間和當前時間相差大於一小時,則進行告警。

接收到第乙個引數

if __name__ ==

'__main__'

: params = sys.ar**[1]

get_records(params)

對資料進行解析

def

get_records

(params)

: data = result_to_json(params)

ip = data[

'ip'

] trigger_id = data[

'trigger.id'

] action_id = data[

'action.id'

] now = datetime.datetime.now(

) conn = connect_db(

) sql =

'select * from '

+ table_name +

' where ip='

+'"'

+ ip +

'"'+

' and trigger_id=%s and action_id=%s;'

%(trigger_id, action_id)

cursor = conn.cursor(

) cursor.execute(sql)

res = cursor.fetchone()if

not res:

create_sql =

'insert into '

+ table_name +

'(ip, trigger_id, action_id, last_time) values(%s, %s, %s, %s)'

d_data =

[ip, trigger_id, action_id, now]

cursor.execute(create_sql, d_data)

conn.commit(

)# 做想做的事

else

: date_time = res[4]

durn =

(now - date_time)

.seconds

if durn > alarm_time:

# 大於60min send

# 做想做的事

# update time

update_sql =

'update '

+ table_name +

' set last_time="%s"'

% now +

' where ip='

+'"'

+ ip +

'"'+

' and trigger_id=%s and action_id=%s;'

%(trigger_id, action_id)

cursor.execute(update_sql)

conn.commit(

) cursor.close(

) conn.close(

)

連線資料庫

def

connect_db()

: conn = pymysql.connect(

host=

'127.0.0.1'

, user=

'root'

, passwd=

'root@123'

, db=

'test'

, port=

3306

, charset=

'utf8'

) cursor = conn.cursor(

) select_sql =

'select * from information_schema.tables where table_name ="%s";'

% table_name

create_table_sql =

'create table if not exists `%s` (`id` int(11) not null auto_increment, `ip` varchar(20) ,`action_id` varchar(20) ,`trigger_id` varchar(20) ,`last_time` datetime, primary key (`id`));'

% table_name

cursor.execute(select_sql)

res = cursor.fetchall()if

not res:

cursor.execute(create_table_sql)

cursor.close(

)return conn

對資料json化

def

result_to_json

(str):

r_ary =

str.split(

'\r\n'

) result =

for item in r_ary:

r_item = item.split(

':',1)

result[r_item[0]

]= r_item[1]

.lstrip(

)return result

目前暫時解決乙個小時內多條相同告警重**送問題。後續再根據需求進行優惠。

mysql檢查備份資料指令碼並在zabbix上告警

知識點 1.zabbix自定義設定觸發報警 2.zabbix sender用法 3.zabbix採集器的用法 zabbix採集器是zabbix監控上的一種模式,是其對伺服器資料採集,將收集的資料反映在zabbix頁面上,有更直觀的感受,通過觸發的告警對運維第一時間搶救營造了充足的時間以及對問題快速定...

docker自定義網路實現部署zabbix

在啟動docker後 docker pull mysql 5.7 docker pull zabbix zabbix agent latest docker pull zabbix zabbix server mysql latest docker pull zabbix zabbix web ng...

python指令碼實現檔案備份

本指令碼通過判斷是否為周一來執行完全備份或增量備份,需提前放到計畫任務中每天執行,實現周一完全備份,之後每天增量備份的功能.具體 實現如下 root bin python from time import strftime import os import tarfile import hashli...