SlideShare a Scribd company logo
Re: 運用に自動化を求めるのは間違っているだろうか
#qpstudy 2016.04
@zembutsu
Is It Wrong to Try to Automate in our System Operations?
前 佛 雅 人
セッション内容
• 運用における自動化範囲の整理・分類
• 自動化で運用はこんなにも楽しくなる
• トラブルシューティングの自動化は未解決課題
#qpstudy 2016.04
Re: 運用に自動化を求めるのは
間違っているだろうか
本来あるべき状態・目的から逆算して
運用業務を楽しくしませんか?
という提案、個人的な願い
Re: 運用に自動化を求めるのは間違っているだろうか
A U TO M AT I O N M Y T H
2015年7月26日 @zembutsu
July Tech Festa 2015
脱・刺身タンポポ 脱・写経文化
主張:自動化で仕事を楽しくしよう
http://www.slideshare.net/zembutsu/automation-myth-we-can-advance
環境構築と自動化
■□□
いかにアプリケーションを速く正確にデプロイするか
そのためには環境構築を速く正確に
Chapter1
#qpstudy 2016.04
Re: 運用に自動化を求めるのは
間違っているだろうか
環境構築(開発→運用)
開
発
チ
ー
ム
運
用
チ
ー
ム
リソース
要求
設計
環境構築
アプリの
デプロイ
デプロイ
調整
デプロイ
調整
依存関係
セットアップ
依存関係
発見
N 回ループ
アプリの
デプロイ完了
監視設定
仮想化
クラウド・コンピューティング
監視自動設定
構成管理ツール
速さ・正確さ
環境構築(開発→運用)
開
発
チ
ー
ム
運
用
チ
ー
ム
イメージ
構築
レジストリ
登録
構成情報
設計
デプロイ
アプリの
デプロイ完了
監視設定
速さ・正確さ
速さ・正確さ
ライブ・デモ
11
‣ Dockerfile
‣ イメージを構築
‣ コンテナの起動
Apacheのコンテナを立ち上げたい
FROM httpd:2.4
COPY ./public-html/ /usr/local/apache2/htdocs/
$ docker build -t myapache: .
$ docker run –d –p 80:80 myapach
12
ミラーサイトを作る
‣ wget コマンドでサイトのミラーを作成
‣ Dockerfile を編集
‣ イメージの構築
‣ コンテナの実行
$ wget -r-l 1 http://docs.docker.jp
FROM httpd:2.4
COPY ./docs.docker.jp/ /usr/local/apache2/htdocs/
$ docker build -t mymirror: .
$ docker run –d –p 81:80 mymirror
13
Redmine
redmine:
image: redmine
links:
- db:postgres
ports:
- 8080:3000
db:
image: postgres
environment:
POSTGRES_PASSWORD: example
POSTGRES_USER: redmine
14
WordPress
wordpress:
image: wordpress
links:
- db:mysql
ports:
- 8080:80
db:
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: exam
15
Rocket.chat
mongo:
image: mongo
command: mongod --smallfiles --oplogSize 128
rocketchat:
image: rocketchat/rocket.chat:latest
environment:
- PORT=3000
- ROOT_URL=http://localhost:3000
-
MONGO_URL=mongodb://mongo:27017/rocketchat
links:
- mongo:mongo
ports:
- 3000:3000
16
version: '2'
services:
zabbix-db:
image: zabbix/zabbix-db-mariadb
volumes:
- zabbix-db-storage:/var/lib/mysql
- backups:/backups
- /etc/localtime:/etc/localtime:ro
environment:
- MARIADB_USER=zabbix
- MARIADB_PASS=my_password
zabbix-server:
image: zabbix/zabbix-3.0:latest
depends_on:
- zabbix-db
ports:
- "80:80"
- "10051:10051"
volumes:
- /etc/localtime:/etc/localtime:ro
links:
- zabbix-db:zabbix.db
environment:
- ZS_DBHost=zabbix.db
- ZS_DBUser=zabbix
- ZS_DBPassword=my_password
volumes:
zabbix-db-storage:
driver: local
backups:
driver: local
Zabbix 3.0
OS ( Linux )
物理/仮想サーバ
Docker エンジン
( docker デーモン )
Linux kernel
コンテナ コンテナ コンテナ
リモート
APIdocker
クライアント
・docker コマンド
Linux, Mac OS X, Windows
・Kitematic (GUI)
Mac OS X, Windows
・Docker Compose
・Docker Swarm
TCP あるいは
Unix ソケットドメイン
Docker
コンテナ
httpd
PID 1
コンテナA コンテナB
ruby
PID 1
chris.rb
PID 2
コンテナのプロセス
httpd
PID 1
コンテナA コンテナB
ruby
PID 1
chris.rb
PID 2
コンテナのプロセス/sbin/init
PID 1
docker
PID 4
httpd
PID 5
ruby
PID 6
chris.rb
PID 7
alice
PID 2
bob
PID 3
PPID 1 PPID 1 PPID 1
PPID 4 PPID 4
PPID 6
コンテナのファイルシステム
コンテナAのファイルシステム
… …
コンテナBのファイルシステム
/etc /bin /etc /bin
/ /
コンテナのファイルシステム
コンテナAのファイルシステム
… …
コンテナBのファイルシステム
/etc
(/data/ubuntu/etc)
/bin
(/data/ubuntu/bin)
/etc
(/data/centos/etc)
/bin
(/data/centos/bin)
/ /
/
/etc /data
/data/ubuntu /data/centos
/bin
$ docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
203137e8afd5: Pull complete
2ff1bbbe9310: Pull complete
933ae2486129: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:1bea66e185d3464fec1abda32ffaf2a11de69833cfcf81bd2b9a5be147776814
Status: Downloaded newer image for ubuntu:latest/
レイヤごとに
並列ダウンロード
$ docker pull wordpress
Using default tag: latest
latest: Pulling from library/wordpress
fdd5d7827f33: Already exists
a3ed95caeb02: Download complete
8c80f2e38113: Download complete
2da85bfb1ac0: Download complete
1da50ec818af: Download complete
b2799c7ad5c9: Downloading 1.113 MB/2.844 MB
4893554c0107: Download complete
b1d739e1b940: Waiting
bd103e3f6195: Waiting
aa560ff33ce6: Waiting
1deabfa10759: Waiting
91e6991f7a34: Waiting
7234c82b998e: Waiting
6bf8bdf2e550: Waiting
a5c7e6ead07c: Waiting
fe011342f195: Waiting
c6dd706ba27e: Waiting
35d564cafd69: Waiting
730edfa5d07f: Waiting
Digest: sha256:bfd7e102741d73cce4ec58b2d937586c670f31df1c80aeaf4d5c525eb3c6ac06
Status: Downloaded newer image for wordpress:latest
ダウンロード済みのレイヤ
なので再取得しない
ダウンロード中
ダウンロード済み
ダウンロード待ち
docker クライアント docker エンジン
$ docker run hello-world
run
docker run hello-world
オペレーティング・システムに
対して docker プログラムの
実行を伝える
Docker に対してコンテナに
読み込むイメージの情報を
伝える
Docker コンテナを
作成・実行するため
のサブコマンド
docker クライアント docker エンジン
$ docker run hello-world
run
Docker Hub
pull
レジストリ
latest
イメージ
タグ
hello-world レポジトリ
• Docker Engine は「docker
run」実行時にローカルにイ
メージがなければレジストリ
(DockerHubが標準)から
イメージをダウンロードする。
そのため初回実行時は時間
かかる場合がある。
docker クライアント docker エンジン
$ docker run hello-world
run
Docker Hub
pull
レジストリ
latest
イメージ
タグ
hello-world レポジトリ
• Docker Engine は「docker
run」実行時にローカルにイ
メージがなければレジストリ
(DockerHubが標準)から
イメージをダウンロードする。
そのため初回実行時は時間
かかる場合がある。
latest
イメージ
タグ
“読み書き可”なレイヤ
読み込み専用 latest
docker クライアント docker エンジン
$ docker run hello-world
run
Docker Hub
pull
レジストリ
latest
イメージ
タグ
hello-world レポジトリ
• Docker Engine は「docker
run」実行時にローカルにイ
メージがなければレジストリ
(DockerHubが標準)から
イメージをダウンロードする。
そのため初回実行時は時間
かかる場合がある。
latest
イメージ
タグ
latest
コンテナ化した
hello-worldの実行
Hello from Docker.
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs
the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent
it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker Hub
account:
https://hub.docker.com
For more examples and ideas, visit:
https://docs.docker.com/userguide/
コンテナに対してリソース制限が可能
速さ・正確さ
トラブルシューティングと自動化
■■□
いかに速く正確に状況把握・復旧するか
仮想化やクラウドでスケールした環境でも対応するには
Chapter2
#qpstudy 2016.04
Re: 運用に自動化を求めるのは
間違っているだろうか
トラブルシュート(運用・監視)
開
発
チ
ー
ム
運
用
チ
ー
ム
運用開始
(正常運用)
異常検出
アラート
障害
報告書
N 回ループ
障害復旧
状況確認 原因特定 復旧作業
調査
再発防止策
運用・監視ツール
時系列リソース監視
ログ監視
自動復旧支援
自動設定変更
Re: 運用に自動化を求めるのは間違っているだろうか
Re: 運用に自動化を求めるのは間違っているだろうか
ところで、あなたの所のサーバ
重いんだけれど
水 金 地 月 火 木 土 天 冥 海
Mercury Venus Earth Moon Mars Jupiter Saturn Uranus Pluto Neptune
コンピュータ資源が
貴重だった時代
コンピュータ資源が
空気のような時代
物理サーバ
PC
クラウド
コンテナ
IoTデバイス
救急救命・医療モデルを
障害対応に応用できる(仮説)
サーバや機器
Servers, Routers, Appliances…
人間
as we, Human
最近、サーバの
様子がちょっと
おかしいのだが
最近、頭が
痛いんです…
Doctor
・血液検査
・レントゲン
・触診
Operator
・ログ確認
・コマンド実行
・各種調査
メモリ足りない
貧血ですね
http://www.flickr.com/photos/changereality/9221281165 by Warner Vermaak
サーバや機器
Servers, Routers, Appliances…
人間
as we, Human
…
system halt
Kernel Panic!
……。
(返事がない)
DoctorOperator
・Reboot
サーバ停止は心停止!原因特定よりも蘇生を!
これはいけないこれはいけない
………… ………… ………… ……… ……
心臓は正常
脳死状態
死活監視は正常
サービスは停止状態
致命的な障害
PING
サービス障害
HTTP
サービス障害
SSH
軽度の障害
HTTP
軽度の障害
SSH
軽度の障害
ICMP
致命的な障害
PING
サービス障害
HTTP
サービス障害
SSH
軽度の障害
HTTP
軽度の障害
SSH
軽度の障害
ICMP
{Base Template:icmppingloss[,5,,,].last(0)}>50 |
{Base Template:icmppingsec[,5,,,,].last(0)}=0
依存関係付きテンプレート
{Base Template:net.tcp.service[http,,80].count(5m,0)}>3 &
{Base Template:net.tcp.service[http,,80].last(0,300)}=0
{Base Template:net.tcp.service[ssh,,22].count(5m,0)}>3 &
{Base Template:net.tcp.service[ssh,,22].last(0,300)}=0
{Base Template:net.tcp.service[http,,80].last(0)}=0
{Base Template:net.tcp.service[http,,80].last(0)}=0
{Base Template:net.tcp.service[ssh,,22].last(0)}=0
Re: 運用に自動化を求めるのは間違っているだろうか
http://www.flightradar24.com
Re: 運用に自動化を求めるのは間違っているだろうか
管制塔 レーダー
管制官
・肉眼での監視限界 ・山の裏側、夜間も見える
・より正確な位置・高度・時系列の位置把握・記録
・正確な状況判断と的確な指示
Control Center
Operator
RADER ( radio detection and ranging)
ZabbixのLLD
中央集権モデル
Consulのサービスディスカバリ
非中央集権モデルアンチ・エントロピー
監視間隔や監視性能は
Zabbixサーバに依存
個々の監視対象(サービス)や間隔は
エージェントが定義
秒単位で数千ノードを一斉管理
KVS
サービス
カタログ
・HTTP
・API
・DNS
Anti-Entropy - Consul by HashiCorp
https://www.consul.io/docs/internals/anti-entropy.html
KVS
運用担当 サービス・ディスカバリ機構Zabbix API GW
Zabbixとサービス・ディスカバリを連携する、トリアージ的運用支援モデル
API
サービス・カタログ
ホスト名・IPアドレス・サービス名等
トリアージ
優先度の判断支援
管制塔 Control Center レーダー Radar
(radio detection and ranging)
Re: 運用に自動化を求めるのは間違っているだろうか
Re: 運用に自動化を求めるのは間違っているだろうか
自動化の価値は
■■■
どうやって向き合えばいいのか?
Chapter3
#qpstudy 2016.04
Re: 運用に自動化を求めるのは
間違っているだろうか
Re: 運用に自動化を求めるのは間違っているだろうか
個人的な主張
• ツール導入(自動化)が目的化すると
皆が不幸になる
のではないでしょうか。
例:コスト削減・工数削減のためのコンテナ化や自動化は、開発・運用の両チームに
業務フローの変更が必要になる場合があり、意図しないコストを生む可能性。
自動化でポイントだと思うところ
• 仮想化やクラウドなりコンテナへの対応は、
全ての解決に結びつかない。
• 局所最適化は避けた方が良いのでは。
• 目的を見失わないこと。
・
暗黒^H^H物理時代
仮想化・クラウド時代
コンテナ時代
機
材
発
注
機
材
納
品
設
置
機
器
設
定
事
前
設
計
ク
リ
ッ
ク
見
積
も
り
O
S
設
定
環
境
構
築
試
験
利
用
開
始
試
験
開
発
試
験
運
用
利
用
開
始
…
…
事
前
設
計
ク
リ
ッ
ク
試
験
利
用
開
始
…
事
前
設
計
ク
リ
ッ
ク
試
験
利
用
開
始
…
開 発 段 階 検 証 段 階 本 番 段 階
すべてを迅速に、一貫した環境で行いやすい← New
•
Docker
• コンテナにはアプリケーションに
依存するバイナリとライブラリのみ
• 数百MB程度~のコンテナ
• 他のコンテナ間で kernel を共有
???「すべてがコンテナになる」
物理サーバ 仮想化 クラウド コンテナ
DockerDockerDocker
61
利用シーン
開発 運用
評価 ステージによって異なる
TASK
devチームの範囲
opsチームの範囲
62
利用シーン
開発 運用
評価
TASK TASK
63
個人的な主張
• 「自動化」を導入するだけでは価値を生まないのでは。
• 「自動化」は技術選択要素の1つにすぎないので、
業務フローに一致するなら、導入してはいかがでしょうか。
• 楽しくやりませんか。
・
セッションの振り返り
• 運用における自動化範囲の整理・分類
• 自動化で運用はこんなにも楽しくなるかも
• トラブルシューティングの自動化は未解決課題
#qpstudy 2016.04
Re: 運用に自動化を求めるのは
間違っているだろうか
本来あるべき状態・目的から逆算して
運用業務を楽しくしませんか?
という提案、個人的な願い
何か気になることはありますか?
#qpstudy 2016.04
Re: 運用に自動化を求めるのは
間違っているだろうか
67
私は誰?
‣ @zembutsu a.k.a. 前佛雅人
- Technology Evangelist; Creationline, Inc. – 2 yrs
- Technical Trainer; Docker Authorized Trainer – 0.8 yr
- Data Center Operations Engineer – 15+ yrs
興味:運用監視自動化、趣味でOSSやクラウド系の検証・情報発信
- SlideShare http://slideshare.net/zembutsu
- Blog http://pocketstudio.jp/log3
Why am I here?
+MasahitoZembutsu
https://twitter.com/creationline

More Related Content

Re: 運用に自動化を求めるのは間違っているだろうか