Stackdriver와 slackbot으로 서비스 자동 복구
18526 단어 stackdriverslackbot
했던 일
계기
이전부터이 손의 이야기는 팀 내에서 쵸이 쵸이 했지만, 동료가 뭔가 재미있을 것 같은 것을
시도했기 때문에 俺も俺も!
라고 하는 것이 계기입니다.
이전부터이 손의 이야기는 팀 내에서 쵸이 쵸이 했지만, 동료가 뭔가 재미있을 것 같은 것을
시도했기 때문에
俺も俺も!
라고 하는 것이 계기입니다.⇒이 사고 과정에서
シンプルで簡単に自動起動できそうじゃね
와 뇌즙이 나온 것이 계기입니다. 덧붙여서, 동료의 기사는 이쪽입니다.
htps : // 코 m / 히로키 사콘 주 / ms / 7f0084 d9 a7 df777에서 95
stackdriver의 설정이나 ansible의 환경 설정등은↑의 기사에 맡기도록
slackbot을 중심으로 쓰고 싶습니다.
bot 시작
<환경>
python3.6
slackbot pip3 install slackbot
기본 설정은 생략합니다. 아래의 기사를 알기 쉽습니다.
Python의 slackbot 라이브러리로 Slack 봇 만들기
이전에 참고하였습니다
bot 소환
my_mention.py# coding: utf-8
from slackbot.bot import respond_to
from slackbot.bot import listen_to
from slackbot.bot import default_reply
@default_reply()
def default_func(message):
message.reply("もあぁぁぁい")
라고…일단 성공(우치의 완코와 모아이가……슈·슈르…)
Stack driver의 알림
GCP의 GCE 프로세스(nginx)를 감시하고, down하면 slackdriver에 다음과 같이 통지가 옵니다.
up는 이런 느낌.
어떻게 데리러 갈 수 있을까
여기가 조금 빠졌습니다 ... 보통 텍스트라면 어려움없이 픽업할 수 있습니다만, 풍부한 attachments의 내용을 픽업할 필요가 있습니다.
my_mention.py@listen_to(r'[\s\S]*')
def listen_func(message):
msg = message.body
print(msg)
if 'attachments' in msg:
if "web001_nginx" in msg["attachments"][0]["fallback"]:
if "Process count for xxxxx-xxxxx-xxxxx web001 is below the threshold of 1 with a value of 0." in msg["attachments"][0]["text"]:
message.send("落ちたもあぁぁぃ、ansible起動もぁぁぃ!")
elif "Process count for xxxxx-xxxxx-xxxxx web001 has returned to normal with a value of 1.000." in msg["attachments"][0]["text"]:
message.send("起動したもぁぁぃ")
else:
print("for add host")
else:
print("no attachment")
3,4행째로 body 전체를 취득해 표시하면 이런 느낌이었습니다. (다운시)
{'text': 'Incident <https://app.google.stackdriver.com/incidents/0.xxxxxxxxxxxxxproject=xxxxx-xxxxx-xxxxx|#0.xxxxxxxx> started', 'username': 'Google Cloud Monitoring', 'icons': {'image_48': 'https://s3-us-west-2.amazonaws.com/slack-files2/bot_icons/2017-01-21/130004243825_48.png'}, 'bot_id': 'XXXXXXXX', 'attachments': [{'fallback': 'web001_nginx', 'text': 'Process count for xxxxx-xxxxx-xxxxx web001 is below the threshold of 1 with a value of 0.', 'pretext': 'Process Health on Instance (GCE) web001_nginx', 'title': 'web001_nginx', 'id': 1, 'title_link': 'https://app.google.stackdriver.com/policy-advanced/xxxxxxxxxxxxxxxxxxxxproject=xxxxx-xxxxx-xxxxxx', 'color': 'a30200'}], 'type': 'message', 'subtype': 'bot_message', 'team': 'XXXXXXXX', 'channel': 'XXXXXXXXX', 'event_ts': 'XXXXXXXXXXXXX', 'ts': 'XXXXXXXXXXXXX'}
up시
{'text': 'Incident <https://app.google.stackdriver.com/incidents/xxxxxxxxxproject=xxxxxx-xxxxxx-xxxxx|#0.xxxxxxx> stopped', 'username': 'Google Cloud Monitoring', 'icons': {'image_48': 'https://s3-us-west-2.amazonaws.com/slack-files2/bot_icons/2017-01-21/130004243825_48.png'}, 'bot_id': 'XXXXXXXX', 'attachments': [{'fallback': 'web001_nginx', 'text': 'Process count for xxxxx-xxxxxx-xxxxxx web001 has returned to normal with a value of 1.000.', 'pretext': 'Process Health on Instance (GCE) web001_nginx', 'title': 'web001_nginx', 'id': 1, 'title_link': 'https://app.google.stackdriver.com/policy-advanced/xxxxxxxxxxxxxxxxxxxxxxxxxproject=xxxxx-xxxxxx-xxxxxx', 'color': '2eb886'}], 'type': 'message', 'subtype': 'bot_message', 'team': 'XXXXXXXX', 'channel': 'XXXXXXXXX', 'event_ts': 'xxxxxxxxxxxx', 'ts': 'xxxxxxxxxxxxxxxxx'}
취득할 수 있는 것을 알면 후에는 자유롭게.
후에는 적당히 커맨드를 두드리도록 완성입니다.
def cmd(path, command):
os.chdir(path)
result = subprocess.Popen(command.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = result.communicate()
return (stdout, stderr)
시작도
ansible 기동도 ぁぁぃ! 해 주었습니다.
Reference
이 문제에 관하여(Stackdriver와 slackbot으로 서비스 자동 복구), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/andromeda/items/fcb2ea02e9bb32e329e4
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# coding: utf-8
from slackbot.bot import respond_to
from slackbot.bot import listen_to
from slackbot.bot import default_reply
@default_reply()
def default_func(message):
message.reply("もあぁぁぁい")
@listen_to(r'[\s\S]*')
def listen_func(message):
msg = message.body
print(msg)
if 'attachments' in msg:
if "web001_nginx" in msg["attachments"][0]["fallback"]:
if "Process count for xxxxx-xxxxx-xxxxx web001 is below the threshold of 1 with a value of 0." in msg["attachments"][0]["text"]:
message.send("落ちたもあぁぁぃ、ansible起動もぁぁぃ!")
elif "Process count for xxxxx-xxxxx-xxxxx web001 has returned to normal with a value of 1.000." in msg["attachments"][0]["text"]:
message.send("起動したもぁぁぃ")
else:
print("for add host")
else:
print("no attachment")
{'text': 'Incident <https://app.google.stackdriver.com/incidents/0.xxxxxxxxxxxxxproject=xxxxx-xxxxx-xxxxx|#0.xxxxxxxx> started', 'username': 'Google Cloud Monitoring', 'icons': {'image_48': 'https://s3-us-west-2.amazonaws.com/slack-files2/bot_icons/2017-01-21/130004243825_48.png'}, 'bot_id': 'XXXXXXXX', 'attachments': [{'fallback': 'web001_nginx', 'text': 'Process count for xxxxx-xxxxx-xxxxx web001 is below the threshold of 1 with a value of 0.', 'pretext': 'Process Health on Instance (GCE) web001_nginx', 'title': 'web001_nginx', 'id': 1, 'title_link': 'https://app.google.stackdriver.com/policy-advanced/xxxxxxxxxxxxxxxxxxxxproject=xxxxx-xxxxx-xxxxxx', 'color': 'a30200'}], 'type': 'message', 'subtype': 'bot_message', 'team': 'XXXXXXXX', 'channel': 'XXXXXXXXX', 'event_ts': 'XXXXXXXXXXXXX', 'ts': 'XXXXXXXXXXXXX'}
{'text': 'Incident <https://app.google.stackdriver.com/incidents/xxxxxxxxxproject=xxxxxx-xxxxxx-xxxxx|#0.xxxxxxx> stopped', 'username': 'Google Cloud Monitoring', 'icons': {'image_48': 'https://s3-us-west-2.amazonaws.com/slack-files2/bot_icons/2017-01-21/130004243825_48.png'}, 'bot_id': 'XXXXXXXX', 'attachments': [{'fallback': 'web001_nginx', 'text': 'Process count for xxxxx-xxxxxx-xxxxxx web001 has returned to normal with a value of 1.000.', 'pretext': 'Process Health on Instance (GCE) web001_nginx', 'title': 'web001_nginx', 'id': 1, 'title_link': 'https://app.google.stackdriver.com/policy-advanced/xxxxxxxxxxxxxxxxxxxxxxxxxproject=xxxxx-xxxxxx-xxxxxx', 'color': '2eb886'}], 'type': 'message', 'subtype': 'bot_message', 'team': 'XXXXXXXX', 'channel': 'XXXXXXXXX', 'event_ts': 'xxxxxxxxxxxx', 'ts': 'xxxxxxxxxxxxxxxxx'}
def cmd(path, command):
os.chdir(path)
result = subprocess.Popen(command.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = result.communicate()
return (stdout, stderr)
Reference
이 문제에 관하여(Stackdriver와 slackbot으로 서비스 자동 복구), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/andromeda/items/fcb2ea02e9bb32e329e4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)