Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Ansible とStackStorm でつくる ChatOps 環境
Search
katsuhisa_
PRO
April 26, 2018
Technology
1
8.2k
Ansible とStackStorm でつくる ChatOps 環境
Ansible Night in Tokyo 2018.04 (
https://ansible-users.connpass.com/event/84907/
) で話した資料です。
katsuhisa_
PRO
April 26, 2018
Tweet
Share
More Decks by katsuhisa_
See All by katsuhisa_
SRE本出版からまもなく10年!〜これまでに何が起こり、これから何が起こるのか〜
katsuhisa91
PRO
0
390
Reliability Engineering at Studist
katsuhisa91
PRO
0
440
依頼仕事の最適化 〜未完了をいかに完了にするか〜
katsuhisa91
PRO
17
10k
障害対応の人間的側面
katsuhisa91
PRO
4
1.3k
Inside Studist Lightning Talks
katsuhisa91
PRO
0
890
SRE NEXT で過去に紹介されたAWS 知見速習
katsuhisa91
PRO
2
910
インフラエンジニアの多様性と評価、またはキャリアへのつなげ方
katsuhisa91
PRO
0
1.2k
Job Crafting
katsuhisa91
PRO
0
3.3k
Self-Serviceとサイロ化と組織構造
katsuhisa91
PRO
0
1.2k
Other Decks in Technology
See All in Technology
相互運用可能な学修歴クレデンシャルに向けた標準技術と国際動向
fujie
0
250
Claude CodeでKiroの仕様駆動開発を実現させるには...
gotalab555
3
1k
開発 × 生成AI × コミュニケーション:GENDAの開発現場で感じたコミュニケーションの変化 / GENDA Tech Talk #1
genda
0
220
九州の人に知ってもらいたいGISスポット / gis spot in kyushu 2025
sakaik
0
160
いかにして命令の入れ替わりについて心配するのをやめ、メモリモデルを愛するようになったか(改)
nullpo_head
7
2.6k
JAWS AI/ML #30 AI コーディング IDE "Kiro" を触ってみよう
inariku
3
370
o11yツールを乗り換えた話
tak0x00
2
1.3k
結局QUICで通信は速くなるの?
kota_yata
5
3.9k
AWS DDoS攻撃防御の最前線
ryutakondo
1
150
【新卒研修資料】数理最適化 / Mathematical Optimization
brainpadpr
27
13k
Rubyの国のPerlMonger
anatofuz
3
740
Serverless Meetup #21
yoshidashingo
1
120
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
235
140k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.6k
The Pragmatic Product Professional
lauravandoore
36
6.8k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Scaling GitHub
holman
461
140k
Making Projects Easy
brettharned
117
6.3k
We Have a Design System, Now What?
morganepeng
53
7.7k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
Writing Fast Ruby
sferik
628
62k
Transcript
Ansible とStackStorm でつくる ChatOps 環境 Ansible Night in Tokyo 2018.04
株式会社スタディスト 北野 勝久
すきなAnsible モジュール lineinfile : @katsuhisa__
突然ですが、 こんなことありませんか?
監視ツール 「<ALERT> SERVER001 !!」 ぼく 「アラートきた」 Aさん 「なんだなんだ」 ある日のSlack でのコミュニケーション
ぼく 「なんだこのアラートか」 Aさん 「なんだこのアラートか」 ぼく 「対応やっときますね」 Aさん 「よろしく」 ある日のSlack でのコミュニケーション
ぼく がちゃがちゃ(対応作業) ぼく 「こんな感じでした〜」(実行結果共有) --- 数分後 --- 監視ツール 「【Resolved】<ALERT> SERVER001
!!」 ぼく 「おつかれさまでした〜」 Aさん 「おつかれ〜」 ある日のSlack でのコミュニケーション
すぐに状況確認して、すぐに実行結果を共有したい ➔実行結果を共有するために ➔Slack と作業環境を行き来するの面倒 なんなら初動対応と結果共有すべて自動化したい ※うちのSRE チームの名誉のために書いておくと、 ※こういう類のものは、現時点でも自動復旧できるようになっている箇所も多いです
それ、StackStorm でできます
StackStorm? Event-Driven Automation StackStorm is a powerful open-source automation platform
that wires together all of your apps, services and workflows. It’s extendable, flexible, and built with love for DevOps and ChatOps
StackStorm? Event-Driven Automation StackStorm is a powerful open-source automation platform
that wires together all of your apps, services and workflows. It’s extendable, flexible, and built with love for DevOps and ChatOps ➔ IFTTT for Ops
IFTTT ? めっちゃかんたん。 「もし、this なら、that する。」以上。
IFTTT for Ops ? 例えば、こんな感じの世界になる IF THIS : もし、◦◦のアラートがきたら、 THEN
THAT : Nginx を再起動して、PagerDuty にポスト
自動化できて幸せ
人の欲望には限りがない
そこまでできるんだったら・・・ アドホックなコマンド以外も実行したくなる Ansible に実装されているあれこれが使いたいとか なんならそもそもPlaybook を実行したいとか
それ、StackStorm でできます
検証してみた https://github.com/StackStorm/showcase-ansible-chatops
Ansible の 実行結果が表示
--- name: chatops.ansible_server_status action_ref: st2_chatops_aliases.server_status description: Show status for hosts
(ansible ping module) formats: - display: "status <hosts>" representation: - "status {{ hosts }}" - "ping {{ hosts }}" result: format: | Here is your status for `{{ execution.parameters.hosts }}` host(s): {~} ```{{ execution.result.stdout }}``` extra: slack: color: "{% if execution.result.succeeded %}good{% else %}danger{% endif %}" fields: - title: Alive value: "{{ execution.result.stdout|regex_replace('(?!SUCCESS).', '')|wordcount }}" short: true - title: Dead value: "{{ execution.result.stdout|regex_replace('(?!UNREACHABLE).', '')|wordcount }}" short: true footer: "{{ execution.id }}" footer_icon: "https://stackstorm.com/wp/wp-content/uploads/2015/01/favicon.png" aliases/server_status.yaml エイリアス定義
--- name: http_status_codes description: Show sorted http status codes from
nginx logs runner_type: local-shell-cmd entry_point: "" enabled: true parameters: sudo: immutable: true default: true kwarg_op: immutable: true cmd: description: "Command to run" type: string immutable: true default: "/opt/stackstorm/virtualenvs/ansible/bin/ansible {{hosts|replace('http://','')}} --become -m shell -a \"awk '{print \\$9}' /var/log/nginx/access.log |sort |uniq -c |sort -k1,1nr 2>/dev/null|column -t\"" hosts: description: "Ansible hosts" type: string required: true actions/http_status_codes.yaml 実行の内容
--- name: http_status_codes description: Show sorted http status codes from
nginx logs runner_type: local-shell-cmd entry_point: "" enabled: true parameters: sudo: immutable: true default: true kwarg_op: immutable: true cmd: description: "Command to run" type: string immutable: true default: "/opt/stackstorm/virtualenvs/ansible/bin/ansible {{hosts|replace('http://','')}} --become -m shell -a \"awk '{print \\$9}' /var/log/nginx/access.log |sort |uniq -c |sort -k1,1nr 2>/dev/null|column -t\"" hosts: description: "Ansible hosts" type: string required: true actions/http_status_codes.yaml 実行の内容 "/opt/stackstorm/virtualenvs/ansible/bin/ansible {{hosts|replace('http://','')}} --become -m shell -a \ "awk '{print \\$9}' /var/log/nginx/access.log |sort |uniq -c |sort -k1,1nr 2>/dev/null|column -t\""
\Ansible でたのしいChatOps ライフを/