Заваливаешь бывает ты такой по ssh на какой нибудь сервер и если все актуальные обновления натянуты, то тебе рисуется в приветственном сообщении такая картинка:
И мне понадобилось знать когда вот приходят эти обновления, заодно чтобы рисовалось на графике - когда они поступали, когда устанавливались ну и заодно чтобы отзванивало о новых обновлениях в телеграмм...
Вообще в ubuntu информация об обновлениях в приветственное сообщение когда по ssh заваливаешь попадает из файла, который находится по пути /var/lib/update-notifier/updates-available. Вот его мы и будем использовать...
У меня уже имеется в хозяйстве готовый стэк с influxdb в связке с grafana, которая рисует данные из него. Всё что мне необходимо - это послать http запросом данные метрик в influxdb, а об отрисовке данных и посылке их в telegram уже позаботится grafana. Для начала в influx я создаю новую базу с именем softwareupdates. Чтобы не долго заморачиваться - я написал скрипт на python:
#!/usr/bin/env python3
import time
import requests
import sys
import re
import os
import subprocess
hostname = os.uname()[1]
influxdbinitial = 'https://influxdb.host.tld/write?db=softwareupdates'
# функция для добавления в БД influxdb инфы о обновлениях
def puttoinfluxdb(totalupdates, securityupdates):
# заправляем инфу о кол-ве общих обновлений
data_binary = 'softwareupdates,host='+hostname+' totalupdates='+totalupdates
try:
response = requests.post(influxdbinitial, data=data_binary)
print(response)
except requests.exceptions.RequestException as e: # This is the correct syntax
print (e)
sys.exit(1)
# заправляем инфу о кол-ве обновлений на безопасность
data_binary = 'softwareupdates,host='+hostname+' securityupdates='+securityupdates
try:
response = requests.post(influxdbinitial, data=data_binary)
print(response)
except requests.exceptions.RequestException as e: # This is the correct syntax
print (e)
sys.exit(1)
def updatesnotifyget():
#subprocess.run(["/usr/bin/apt", "update"])
#time.sleep(3)
f = open("/var/lib/update-notifier/updates-available", "r")
lines = f.readlines()
# print(lines[1])
totalupdates = re.sub("[^0-9^]", "", lines[1])
securityupdates = re.sub("[^0-9^]", "", lines[2])
puttoinfluxdb(totalupdates, securityupdates)
if __name__ == "__main__":
updatesnotifyget()
Теперь сохраняю этот скрипт в /opt/scripts/checksoftwareupdates.py и даю права на выполнение оного с помощью chmod+x /opt/scripts/checksoftwareupdates.py. Далее пихаем скрипт в cron:
# check software updates
*/58,*/10,*/20 * * * * /opt/scripts/checksoftwareupdates.py
# ^ буду запускать каждую 10, 20 и 58 минуту каждого часа
В графане создаю новый график, куда запихиваю данные и в итоге получаю:
Там же, в графане, делаем в этом графике алерт и в итоге в телегу при появлении каких то обновлений в системе начинает прилетать:
Комментариев нет:
Отправить комментарий