telegram bot 으로 서버 상태 알림 받기(cpu, memory, php-fpm)
참고 :
https://core.telegram.org/
https://github.com/php-telegram-bot/core
http://devhicom.tistory.com/12
1. telegram bot 생성
1) telegram 연락처에서 @BotFather 친구추가
2) 대화창에 /newbot 입력
3) 생성할 bot 이름 입력 bot 이름은 Bot 로 끝나거나 _bot 로 끝나야함
4) bot 이름 입력 하면 token 출력됨
2. 생성한 telegram bot 친구추가
1) 예를 들어 1번에서 생성한 bot 이름이 galguleeBot 이라면
2) telegram 연락처에서 @galguleeBot 친구추가
3. chat_id 정보(나 즉, 상태알림 받을 사람 chat id)
1) 2번의 token(숫자:문자열 형식)
2) https://api.telegram.org/bot토큰/getUpdates
==> @galguleeBot 의 채팅 정보 등이 출력 됨(json)
3) 혹시라도 chat botd의 설정을 webhook 활성화 하면 안 됨
4. 나 즉 상태알림 받을 사람에게 테스트 메세지 보내기
1) https://api.telegram.org/bot토큰/sendMessage?chat_id=숫자로된chgat_id&text=Hello%20World%21
2) 나에게 Hello World 가 수신 되면 성공
5. python 소스 코드
[root] vim /home/virtual/bot/send_msg.py
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os import string import psutil import subprocess import requests from urllib.parse import urlencode # 기준 및 초기값 설정 cpuLimit = 70 # cpu 사용량 memLimit = 70 # 메모리 사용량 phpLimit = 45 # php-fpm process 갯수 serverName = '서버명' title = '[' + serverName + ' 서버]\r\n' msg = title def send(chat): print(chat) params1 = urlencode({'chat_id': '알림받을chatid', 'text': chat}).encode() r = requests.post('https://api.telegram.org/bot토큰/sendMessage', params=params1, json=[]) print(r.elapsed.total_seconds()) print(r.json()) # cpu 사용율 계산 def getCpuUsage(): cpu = 0 for x in range(2): cpu += psutil.cpu_percent(interval=1) return round(float(cpu)/3,2) # memory 사용량 계산 def getMemUsage(): mem=str(os.popen('free -t -m').readlines()) T_ind=mem.index('T') mem=mem[T_ind+6:] mem_T=mem[:13] mem_sub=mem[14:] mem_U=mem_sub[:13] return round(float(mem_U)/float(mem_T)*100,2) # php-fpm 갯수 def getPhpUsage(): php=str(os.popen('ps -C php-fpm --no-headers | wc -l').readline()) return int(php) avgCpu = getCpuUsage() memUsage = getMemUsage() phpUsage = getPhpUsage() if avgCpu > cpuLimit: msg += 'cpu 사용량이 기준값(' + str(cpuLimit) + '%)을 초과하였습니다.\r\n' msg += 'cpu usage : ' + str(avgCpu) + '%\r\n' if memUsage > memLimit: msg += 'memory 사용량이 기준값(' + str(memLimit) + '%)을 초과하였습니다.\r\n' msg += 'memory usage : ' + str(memUsage) + '%' if phpUsage > phpLimit: msg += 'php-fpm 실행수 기준값(' + str(phpLimit) + '개)을 초과하였습니다.\r\n' msg += 'php-fpm count : ' + str(phpUsage) + '개' # php-fpm 기준값 초과 되면 재시작 php=str(os.popen('/etc/rc.d/init.d/php-fpm restart').readlines()) if avgCpu > cpuLimit or memUsage > memLimit or phpUsage > phpLimit: send(msg)
6. crontab 등록(10분마다 실행)
[root] crontab -e
## telegram bot alarm
*/10 * * * * /usr/bin/python3 /home/virtual/bot/send_msg.py > /dev/null
best site Jarle Thorsen