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
7.9k
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_
依頼仕事の最適化 〜未完了をいかに完了にするか〜
katsuhisa91
PRO
16
9k
障害対応の人間的側面
katsuhisa91
PRO
3
890
Inside Studist Lightning Talks
katsuhisa91
PRO
0
730
SRE NEXT で過去に紹介されたAWS 知見速習
katsuhisa91
PRO
2
790
インフラエンジニアの多様性と評価、またはキャリアへのつなげ方
katsuhisa91
PRO
0
1.1k
Job Crafting
katsuhisa91
PRO
0
3k
Self-Serviceとサイロ化と組織構造
katsuhisa91
PRO
0
1.1k
チームで取り組む障害対応
katsuhisa91
PRO
6
2.4k
スタディスト開発部が面接で大切にしている 3つのこと
katsuhisa91
PRO
2
2.2k
Other Decks in Technology
See All in Technology
Covariance, Contravariance & Diamond
alexdaubois
1
120
人工衛星開発のための C2A フレームワークとその開発体験
sksat
0
110
Nuxt × Vue Router の力を最大限に引き出す機能を紹介
ytr0903
2
330
Application Signalsで始めるSLO ユーザー満足度を数値化する第一歩
niftycorp
PRO
2
160
巨大企業でDX革新を起こすということ BTCONJP 2024
yamaken66
0
220
本番のトラフィック量でHudiを検証して見えてきた課題
joker1007
2
270
Snowflakeでスロークエリ改善に取り組んだ話
tabata0208
0
130
RAG: from dumb implementation to serious results
glaforge
0
670
プログラミング写経のすすめ
natsutan
0
170
多数のWebサービスをECS/Fargate構成で効率よく構築・運用するなら copilot-cli
interu
2
170
SOLID - Architecture and Architectural Decisions - Devfest Goa 2024
rivuchk
0
160
とある事業会社にとっての Kaggler の魅力
hakubishin3
7
1.6k
Featured
See All Featured
Automating Front-end Workflow
addyosmani
1365
200k
Optimising Largest Contentful Paint
csswizardry
31
2.9k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
26
1.4k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
664
120k
Into the Great Unknown - MozCon
thekraken
31
1.4k
Scaling GitHub
holman
458
140k
Music & Morning Musume
bryan
46
6.1k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
4.9k
The Language of Interfaces
destraynor
154
24k
Teambox: Starting and Learning
jrom
132
8.7k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
46
2.1k
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 ライフを/