台風ニュースを見ながらアラートコントロールをぼんやり考えた
ニュースを見ながら心痛める一日でした。
広範な流域で多発的に災害が起こると必要な情報を得るというのも難しくなりますね...
・自分の居る場所に加えて上流とか幹線道路とかも把握する必要がある
・住所ではなく「イオンのところ」のように学校やお店などのランドマークでしか把握していない場所は役所や報道の情報とマッチしにくい
(那珂川について多くのツイートで「山新のところから」と言及されていることを見ていて感じました)
・旧地名や難読地名は報道からは伝わりにくく聞きこぼしてしまう
(熊本地震の際に松橋や砥用の扱いで感じました)
システム監視とも似た問題なのかと。
・システムレイヤーやネットワークトポロジーに基づいた依存関係に応じて通知をアグる必要がある
・システム名とユーザーさんの呼び名(例: システム名=www-admin, 呼び名=投稿画面)の対応,整合性
上流下流や導線といった依存関係を管理する事は実現手段ありそうです。
同じ場所なのに人によって様々なCNAME的呼び名を付けている状況は対応難しそうです。「イオンの向かい」とか「タバコ屋の角」なんて重複ありすぎて特定できないでしょう。緯度経度では人に優しくないのでそのままでは使えません。専用機器などが前提となりますがマップで見せるのがいいのかな...
連携装置のオーナーシップ
事前に情報伝えられていましたが、StackStormプロジェクトが the Linux Foundation (LF)に移管されました。
Brocade -> Extreme と慌ただしい動きもあった中でチームを維持し、製品だけでなくOSS版もバージョンアップや機能の追加改善を続けたチームのみなさまやExtreme社には心より感謝します。商用製品 Extreme Workflow Composer は引き続きExtreme社から提供されるということです。上記リリースではExtreme社はOpenSwitchプロジェクトなどで以前からLFのメンバーである旨もアピールされています。
期待される良い効果として例えばExtreme以外のネットワーク機器の自動化Packなど競合関係にあるものの対応に気兼ねがなくなったり、参加するコントリビューターへの障壁が減ったり、LFイベントでの露出機会が増えたりすることが期待されます。
一方で人の動きと合わせてプロジェクトの推進力が維持されるか懸念もあります。Slackを見ている分には変わりなくコミュニティは活発なので全くの杞憂な気もします(日本語チャンネルはあまり動きないですが..)。
StackStormのような連携先の多いソリューションのオーナーシップは体力必要だろうな、と思うのです。連携先は多い方が良いですがその維持は大変だろうと。Ansible界隈においても7月に従来の"Battery Included"の方針からモジュールの位置付けを見直したいお気持ち表明がありました。
古くはKapowマッシュアップポータルなんかも連携先の多いソリューションに該当するでしょうか。連携先もそれぞれバージョンアップや機能の追加変更があるので対応が大変であろうことが想像できます。StackStormやAnsibleの場合は連携先がネットワーク製品かクラウドサービスAPIかではライフサイクルも大きく異なりますし。こういったソリューションは誰がオーナーシップを握るのが良いのか考えさせられます。
とはいえ1ファンに過ぎない私は使ってエンジョイしてフィードバックを続ける事しかできないので、引き続きありがたく使っていこうと思います。現在StackStormの最新版は3.1.0です。10月初めにユーザー企業としてFastlyさんも掲載されました。
https://t.co/k4F10N2A98 implemented StackStorm as part of a bigger global network #automation architecture aimed at providing an interface to #network operations and traffic engineering changes triggered both manually or in response to events on hundreds of devices.
— StackStorm (@Stack_Storm) October 1, 2019
これからも楽しく自動化していきましょう!
ギブアップしたLTネタを供養するエントリー
近日LTでの発表を予定していたのですが、都合により無理っぽくなったので話す予定だった内容を図やコード無しの台詞だけ書いて供養しておきます。
予定変更によりご迷惑をおかけする関係のみなさまには深くお詫びいたします。
その1 グラフを印刷したい
Prometheusで採ったメトリクスデータはGrafanaで見てる人が多いと思いますが
・折れ線グラフを見てるだけで仕事してる気になっていけない
・CI環境とかでなければ安定してくると見所が減る
・SIヤーにとってはWebでダークテーマでインタラクティブにグラフが見られることよりも印刷して月次報告書としてご提出したい
・月次 > 15日 ということで保管期間もそれなりに必要
ということでInfluxDBとかも使っているのですが、研究やってたころのツールでもがいてみました。
Prometheus --remote storage -> postgresql(仮受け) -> NetCDFファイル <- GMTで折れ線グラフ画像作成
GMT: http://gmt.soest.hawaii.edu/
長期時系列データということで(位置情報は無いのですが)NetCDFに突っ込んでみました。そこの仕組みが現段階では非常にnot secureなのでイケナイのですが。
まだ数ヶ月しか動いてませんが、バッチで画像書くには問題無く動いています。
InfluxDBとかPostgreSQLとかで充分事足りている気もしますけど、ね。
その2 グラフから目で読み取るのか
その1で挙げた4つの課題を言うと「普段から折れ線グラフを眺めて通常時の値や定期変動を把握しておくべきだ」と言ってくる人がいます。
ベースラインの値や周期変動って数式で表せるべきじゃないですか?目のフィーリングではなくて。
私くらいになると目で数式書けますけどね。
(ここでデモ。Grafana じゃん、と突っ込まれる)
去年の Monitorama AMD で LT されていたツールですが、見た目に分かりやすいのがいいです。
Hastic に検出させてから、GMTでデータプロットと数式線を重ねて描画すると分かりやすかったり。
最近 Beta になったばかりでまだいろいろとありますが期待のツールです。
hastic-server がそれなりにメモリを必要とするのがお試しにはネックになるかもです。
重ね重ね、ご迷惑おかけする方面の皆様すみません。
時間が足りないーー
sash -stand alone shell
年も明けて、基盤対応等々で今年は使うツールがだいぶ変わっていきそうな予感がしています。ということで現状使っているツールたちを整理がてら紹介しておこうと思います。
最初はsashです。
15年ほど前、「なぜか /usr/bin 以下のバイナリがいくつか消えた」というサーバーの対応をすることが何度かあり(おそらくパイプかfindかで間違った操作が行われたと思われます)、その時から自分が構築するサーバーには保険のためにsashを導入しています。
sashはstand alone shellの名の通り、基本コマンドを組み込みコマンドとして持つので緊急時の作業に役立ちます。
http://members.tip.net.au/~dbell/
More importantly, however, is that many of the standard system commands are built-in to sash. These built-in commands
are:-ar, -chattr, -chgrp, -chmod, -chown, -chroot, -cmp,
-cp, -dd, -echo, -ed, -grep, -file, -find, -gunzip,
-gzip, -kill, -losetup, -ln, -ls, -lsattr, -mkdir,
-mknod, -more, -mount, -mv, -pivot_root, -printenv, -pwd,
-rm, -rmdir, -sum, -sync, -tar, -touch, -umount, -where
(manより抜粋)
Ubuntuならばuniverseにパッケージがあるのでaptで導入できます。
CentOSの場合はソースからの導入になります。
組み込みコマンドとするために、いくつかライブラリの -static パッケージが必要になります。(RHELの場合は optional-rpms のレポジトリを有効化する必要があります)
以下にitamaeレシピで導入手順を載せておきます。
package "zlib-static" do action :install end package "glibc-static" do action :install end package "e2fsprogs-devel" do action :install end directory "/usr/man/man1" [ "wget http://members.tip.net.au/~dbell/programs/sash-3.8.tar.gz", "tar xf sash-3.8.tar.gz", "cd /opt/local/src/sash-3.8 && make && make install", ].each do |command| execute command do cwd "/opt/local/src" end end
とはいえ、その後は幸いsashに救われるような危機は経験していません。
そもそも今どきの環境であればロールバックしたり再デプロイしたり、OSのシステム部分が壊れた場合でも力業で直す以外の方法があるだろうとも思います。
そろそろ sash 保険から脱出できるでしょうか...
Pharos 2.0を試す -とっかかり
Kubernetes ディストリビューションである Kontena Pharos のバージョン2.0がリリースされました。
ひとまずセットアップに挑んでみます。
公式ドキュメントはこちら。
https://pharos.sh/docs/install.html
(1) Kontena アカウントを持っていない人は先に作成しておきます。
https://account.kontena.io/signup
(2) 手元のマシンないしデプロイサーバーで、以下のコマンドを実施します。
# curl -s https://get.pharos.sh | bash
(3) Pharos(kubernetes)をインストールするサーバにアカウントを作成し、sudoersに登録します。
手元のマシンからssh-copyidを行いパスワード入力無しで ssh ログインできるようにしておきます。
(4) 手元のマシンにツールを導入します。
$ source /usr/local/share/chpharos/chpharos.sh $ chpharos --version chpharos 0.4.0 $ chpharos login Log in using your Kontena Account credentials Visit https://account.kontena.io/ to register a new account. Username: (kontena account名) Password: (kontena accountのパスワード) Logged in $ chpharos install latest Downloading 'pharos-cluster' (23768560 bytes) from https://get.pharos.sh/versions/download/pharos-cluster-linux-amd64-2.0.0+oss .. ######################################################################## 100.0% Verifying download SHA256 checksum.. OK Downloading 'kubectl' (55422633 bytes) from https://storage.googleapis.com/kubernetes-release/release/v1.11.4/bin/linux/amd64/kubectl .. ######################################################################## 100.0% Verifying download SHA256 checksum.. OK Downloading 'pharos_license' (869 bytes) from https://raw.githubusercontent.com/kontena/pharos-cluster/v2.0.0/LICENSE .. ######################################################################## 100.0% Verifying download SHA256 checksum.. OK Downloading 'kubectl_license' (11358 bytes) from https://raw.githubusercontent.com/kubernetes/kubernetes/v1.11.4/LICENSE .. ######################################################################## 100.0% Verifying download SHA256 checksum.. OK Installed version 2.0.0+oss. To set as current, use: chpharos use 2.0.0+oss The following license files were downloaded, by continuing to use the tools, you agree to the terms: /home/sysop/.pharos/chpharos/versions/2.0.0+oss/pharos_license /home/sysop/.pharos/chpharos/versions/2.0.0+oss/kubectl_license $ chpharos list 2.0.0+oss $ chpharos use 2.0.0+oss using pharos version 2.0.0+oss $ chpharos current 2.0.0+oss (set via chpharos use command) $ pharos --version pharos-cluster 2.0.0+oss
(5) 手元のマシンで cluster.yml を作成します。ここでは最小構成で(pluginを欲張ってますが)。
hosts: - address: "10.0.0.hoe" user: kontenaadmin (インストール先サーバで作成&sudoers登録したアカウント) role: master network: provider: weave addons: ingress-nginx: enabled: true openebs: enabled: true host-upgrades: enabled: true schedule: "0 6 * * *" schedule_window: 1h reboot: true
(6) 手元のマシンで以下コマンドを実施します。
$ pharos up -c cluster.yml ==> KONTENA PHAROS v2.0.0+oss (Kubernetes v1.11.4) ==> Reading instructions ... ==> Sharpening tools ... ==> Check for Pharos upgrade @ localhost [localhost] Checking for a new version ... ==> Gather host facts @ 10.0.0.hoge [10.0.0.hoge] Checking sudo access ... [10.0.0.hoge] Gathering host facts ... ==> Configure kube client @ foo-bar ==> Validate hosts @ foo-bar [foo-bar] Validating current role matches ... [foo-bar] Validating distro and version ... [foo-bar] Validating host configuration ... [foo-bar] Validating hostname uniqueness ... [foo-bar] Validating host routes ... [foo-bar] Validating localhost dns resolve ... [foo-bar] Validating peer address ... ==> Validate cluster version @ foo-bar ==> Using following software versions: cfssl: 1.2 docker: 1.13.1 etcd: 3.2.18 kubernetes: 1.11.4 metrics-server: 0.2.1 weave-net: 2.4.1 ==> Using following addons: ingress-nginx: 0.17.1 openebs: 0.5.3 host-upgrades: 0.3.0 ==> Configuration is generated and shown below: --- hosts: - address: 10.0.0.hoge private_address: private_interface: role: master user: sysop container_runtime: docker network: provider: weave service_cidr: 10.96.0.0/12 pod_network_cidr: 10.32.0.0/12 kube_proxy: mode: iptables api: {} authentication: {} audit: file: path: "/var/log/kubernetes/audit.json" max_age: 30 max_backups: 20 max_size: 100 kubelet: read_only_port: false telemetry: enabled: true pod_security_policy: default_policy: 00-pharos-privileged image_repository: registry.pharos.sh/kontenapharos addon_paths: [] addons: ingress-nginx: enabled: true openebs: enabled: true host-upgrades: enabled: true schedule: 0 6 * * * schedule_window: 1h reboot: true container_runtime: insecure_registries: [] Continue? (インストール概要が表示された後ここで確認が入るので Y を回答して Enter で決定します) Continue? Yes ==> Starting to craft cluster ... ==> Migrate master @ foo-bar ==> Configure hosts @ foo-bar [foo-bar] Configuring script helpers ... [foo-bar] Configuring essential packages ... [foo-bar] Configuring package repositories ... [foo-bar] Configuring netfilter ... [foo-bar] Configuring container runtime (docker) packages ... ==> Configure kube client @ foo-bar ==> Configure cfssl @ foo-bar [foo-bar] Installing cfssl ... ==> Configure etcd certificate authority @ foo-bar [foo-bar] Configuring etcd certificate authority ... [foo-bar] Caching certificate authority files to memory ... ==> Configure etcd member changes @ foo-bar ==> Configure etcd @ foo-bar [foo-bar] Configuring etcd certs ... [foo-bar] Configuring etcd ... [foo-bar] Waiting for etcd to respond ... ==> Configure secrets encryption @ foo-bar [foo-bar] Generating new encryption keys ... [foo-bar] Creating secrets encryption configuration ... ==> Setup master configuration files @ foo-bar ==> Upgrade master @ foo-bar [foo-bar] Kubernetes control plane is up-to-date. ==> Configure kubelet @ foo-bar [foo-bar] Configuring Kubernetes packages ... [foo-bar] Configuring kubelet ... ==> Configure master @ foo-bar [foo-bar] Checking if Kubernetes control plane is already initialized ... [foo-bar] Kubernetes control plane is not initialized. [foo-bar] Initializing control plane (v1.11.4) ... [foo-bar] Initialization of control plane succeeded! ==> Configure kube client @ foo-bar [foo-bar] Fetching kubectl config ... ==> Load cluster configuration @ foo-bar ==> Configure pod security policies @ foo-bar [foo-bar] Configuring default pod security policies ... ==> Configure DNS @ foo-bar [foo-bar] Patching coredns deployment with 1 replicas (max-surge 0, max-unavailable 1)... ==> Configure Weave network @ foo-bar [foo-bar] Configuring overlay network shared secret ... [foo-bar] Configuring overlay network ... ==> Configure bootstrap tokens @ foo-bar [foo-bar] No new nodes, skipping bootstrap token creation ... ==> Label nodes @ foo-bar [foo-bar] No labels or taints set ... ==> Configure metrics @ foo-bar [foo-bar] Configuring metrics server ... ==> Configure telemetry @ foo-bar [foo-bar] Configuring telemetry service ... ==> Configuring addons ... ==> Enabling addon ingress-nginx ==> Enabling addon openebs ==> Enabling addon host-upgrades ==> Store cluster configuration @ foo-bar [foo-bar] Storing cluster configuration to configmap ... ==> Cluster has been crafted! (took 4 minutes 5 seconds) To configure kubectl for connecting to the cluster, use: pharos-cluster kubeconfig -c cluster.yml > kubeconfig export KUBECONFIG=./kubeconfig
以上でインストール先サーバに kubernetes 環境が構築できました。
試しにインストール先サーバのプロセスを見るとこのような感じです。
systemd,1 --switched-root --system --deserialize 22 |-NetworkManager,458 --no-daemon | |-dhclient,597 -d -q -sf /usr/libexec/nm-dhcp-helper -pf /var/run/dhclient-eth0.pid -lf... | |-{NetworkManager},470 | `-{NetworkManager},474 |-acpid,335 |-agetty,433 --noclear tty1 linux |-agetty,435 --keep-baud 115200 38400 9600 ttyS0 vt220 |-auditd,274 | `-{auditd},275 |-chronyd,332,chrony |-crond,422 -n |-dbus-daemon,327,dbus --system --address=systemd: --nofork --nopidfile --systemd-activation | `-{dbus-daemon},362 |-dockerd-current,13708 --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc ... | |-docker-containe,13713 -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0--start-timeo | | |-docker-containe,14162 c8bb700dcaf9b432433e10ae4c17593fbeb14055192a3307dacb473cf4da4f23/var/run/docker/libcontaine | | | |-pause,14179 | | | |-{docker-containe},14163 | | | |-{docker-containe},14164 | | | |-{docker-containe},14165 | | | |-{docker-containe},14166 | | | |-{docker-containe},14167 | | | |-{docker-containe},14168 | | | |-{docker-containe},14169 | | | `-{docker-containe},14171 | | |-docker-containe,14248 7c3a13ec3aab3104f50ab4e95a31d50ff5681c69e3e7725c9f4edd20ccfcef01/var/run/docker/libcontaine | | | |-etcd,14263 --name=foo-bar --cert-file=/etc/kubernetes/pki/etcd/server.pem ... | | | | |-{etcd},14283 | | | | |-{etcd},14284 | | | | |-{etcd},14285 | | | | |-{etcd},14286 | | | | |-{etcd},14287 | | | | |-{etcd},14296 | | | | |-{etcd},14298 | | | | |-{etcd},15238 | | | | `-{etcd},15416 | | | |-{docker-containe},14249 | | | |-{docker-containe},14250 | | | |-{docker-containe},14251 | | | |-{docker-containe},14252 | | | |-{docker-containe},14253 | | | |-{docker-containe},14255 | | | |-{docker-containe},14259 | | | `-{docker-containe},14276 | | |-docker-containe,15064 856d720ac41fa01b32bac59df1f1857429fd97199aa855261dbed902f3fac93c/var/run/docker/libcontaine | | | |-kube-controller,15088 --horizontal-pod-autoscaler-use-rest-clients=true --address=127.0.0.1 ... | | | | |-{kube-controller},15170 | | | | |-{kube-controller},15171 | | | | |-{kube-controller},15172 | | | | |-{kube-controller},15173 | | | | |-{kube-controller},15208 | | | | |-{kube-controller},15210 | | | | |-{kube-controller},15409 | | | | `-{kube-controller},15410 | | | |-{docker-containe},15065 | | | |-{docker-containe},15066 | | | |-{docker-containe},15067 | | | |-{docker-containe},15068 | | | |-{docker-containe},15070 | | | |-{docker-containe},15071 | | | |-{docker-containe},15072 | | | `-{docker-containe},15152 | | |-docker-containe,15077 0f6089a1281eae2594a9ffa4cee203255e60a1188c39653af6751d05c1b46256/var/run/docker/libcontaine | | | |-kube-apiserver,15102 --audit-log-maxage=30 --audit-log-maxbackup=20 --audit-log-maxsize=100... | | | | |-{kube-apiserver},15147 | | | | |-{kube-apiserver},15148 | | | | |-{kube-apiserver},15149 | | | | |-{kube-apiserver},15166 | | | | |-{kube-apiserver},15191 | | | | |-{kube-apiserver},15201 | | | | |-{kube-apiserver},15202 | | | | |-{kube-apiserver},15236 | | | | `-{kube-apiserver},15237 | | | |-{docker-containe},15078 | | | |-{docker-containe},15079 | | | |-{docker-containe},15080 | | | |-{docker-containe},15083 | | | |-{docker-containe},15084 | | | |-{docker-containe},15086 | | | |-{docker-containe},15089 | | | `-{docker-containe},15090 | | |-docker-containe,15108 ca8aa1b5e49cb945eefdc43c24dc154dfdf59c022a3a153fe8bc8078809cdf24/var/run/docker/libcontaine | | | |-kube-scheduler,15139 --address=127.0.0.1 --kubeconfig=/etc/kubernetes/scheduler.conf --leader-elect=true | | | | |-{kube-scheduler},15183 | | | | |-{kube-scheduler},15184 | | | | |-{kube-scheduler},15185 | | | | |-{kube-scheduler},15192 | | | | |-{kube-scheduler},15204 | | | | |-{kube-scheduler},15205 | | | | |-{kube-scheduler},15206 | | | | |-{kube-scheduler},15207 | | | | `-{kube-scheduler},16512 | | | |-{docker-containe},15116 | | | |-{docker-containe},15117 | | | |-{docker-containe},15118 | | | |-{docker-containe},15119 | | | |-{docker-containe},15120 | | | |-{docker-containe},15125 | | | |-{docker-containe},15126 | | | `-{docker-containe},15177 | | |-docker-containe,15417 8ceea0be2708072d1394d067db26f6739e9902e951682a5585f6b8e9d783325f/var/run/docker/libcontaine | | | |-pause,15439 | | | |-{docker-containe},15418 | | | |-{docker-containe},15419 | | | |-{docker-containe},15420 | | | |-{docker-containe},15421 | | | |-{docker-containe},15422 | | | |-{docker-containe},15423 | | | |-{docker-containe},15424 | | | `-{docker-containe},15534 | | |-docker-containe,15429 4bacdf4f148c70734705c9211ea14a20ca84e60984de5b2c11b11b4c3537ea20/var/run/docker/libcontaine | | | |-pause,15456 | | | |-{docker-containe},15434 | | | |-{docker-containe},15435 | | | |-{docker-containe},15436 | | | |-{docker-containe},15441 | | | |-{docker-containe},15445 | | | |-{docker-containe},15447 | | | |-{docker-containe},15448 | | | `-{docker-containe},15472 | | |-docker-containe,15574 c55bec88bdca6133bf8e0265e54a13662a71e92cc40d613ae7de39b041f6915e/var/run/docker/libcontaine | | | |-kube-proxy,15598 --config=/var/lib/kube-proxy/config.conf | | | | |-{kube-proxy},15638 | | | | |-{kube-proxy},15639 | | | | |-{kube-proxy},15640 | | | | |-{kube-proxy},15651 | | | | |-{kube-proxy},15789 | | | | `-{kube-proxy},17157 | | | |-{docker-containe},15576 | | | |-{docker-containe},15577 | | | |-{docker-containe},15578 | | | |-{docker-containe},15579 | | | |-{docker-containe},15580 | | | |-{docker-containe},15581 | | | |-{docker-containe},15586 | | | `-{docker-containe},15594 | | |-docker-containe,16006 790a065c54977e569b9af0c73e7a272ae933b2065543c0339966a67078fcaf30/var/run/docker/libcontaine | | | |-launch.sh,16022 /home/weave/launch.sh | | | | `-weaver,16092 --port=6783 --datapath=datapath --name=2a:58:7f:c9:a6:8e --host-root=/host ... | | | | |-{weaver},16094 | | | | |-{weaver},16095 | | | | |-{weaver},16096 | | | | |-{weaver},16097 | | | | |-{weaver},16099 | | | | |-{weaver},16100 | | | | |-{weaver},16101 | | | | |-{weaver},16191 | | | | |-{weaver},16192 | | | | |-{weaver},16193 | | | | |-{weaver},16194 | | | | |-{weaver},16202 | | | | |-{weaver},16210 | | | | `-{weaver},16211 | | | |-{docker-containe},16007 | | | |-{docker-containe},16008 | | | |-{docker-containe},16009 | | | |-{docker-containe},16010 | | | |-{docker-containe},16011 | | | |-{docker-containe},16012 | | | |-{docker-containe},16013 | | | `-{docker-containe},16034 | | |-docker-containe,16376 0093170521f5093cc2e67ac168dc30407ebee4d9472f295522b82962165ca432/var/run/docker/libcontaine | | | |-weave-npc,16393 | | | | |-ulogd,16422 -v | | | | |-{weave-npc},16408 | | | | |-{weave-npc},16409 | | | | |-{weave-npc},16410 | | | | |-{weave-npc},16411 | | | | |-{weave-npc},16412 | | | | |-{weave-npc},16413 | | | | |-{weave-npc},16435 | | | | |-{weave-npc},16436 | | | | `-{weave-npc},16456 | | | |-{docker-containe},16377 | | | |-{docker-containe},16378 | | | |-{docker-containe},16379 | | | |-{docker-containe},16380 | | | |-{docker-containe},16381 | | | |-{docker-containe},16383 | | | |-{docker-containe},16387 | | | `-{docker-containe},16388 | | |-docker-containe,16513 5983cab6d9bf5f7f9bed8a5fea3d7f47491d8fa89fe10e6cc8434cda11315b21/var/run/docker/libcontaine | | | |-pause,16530 | | | |-{docker-containe},16514 | | | |-{docker-containe},16515 | | | |-{docker-containe},16516 | | | |-{docker-containe},16517 | | | |-{docker-containe},16518 | | | |-{docker-containe},16520 | | | |-{docker-containe},16521 | | | `-{docker-containe},16548 | | |-docker-containe,16618 faf3a7049527895a7d1393ea73aaca0e14696284c9cf045cbf319263a5b02e4d/var/run/docker/libcontaine | | | |-pause,16634 | | | |-{docker-containe},16619 | | | |-{docker-containe},16620 | | | |-{docker-containe},16621 | | | |-{docker-containe},16622 | | | |-{docker-containe},16623 | | | |-{docker-containe},16624 | | | |-{docker-containe},16625 | | | `-{docker-containe},16651 | | |-docker-containe,16720 hogehogehogehoge/var/run/docker/libcontaine | | | |-pause,16736 | | | |-{docker-containe},16721 | | | |-{docker-containe},16722 | | | |-{docker-containe},16723 | | | |-{docker-containe},16724 | | | |-{docker-containe},16725 | | | |-{docker-containe},16727 | | | |-{docker-containe},16728 | | | `-{docker-containe},16753 | | |-docker-containe,16786 takotako/var/run/docker/libcontaine | | | |-coredns,16802 -conf /etc/coredns/Corefile | | | | |-{coredns},16821 | | | | |-{coredns},16822 | | | | |-{coredns},16823 | | | | |-{coredns},16824 | | | | |-{coredns},16832 | | | | |-{coredns},16833 | | | | |-{coredns},16835 | | | | |-{coredns},16837 | | | | `-{coredns},17085 | | | |-{docker-containe},16787 | | | |-{docker-containe},16788 | | | |-{docker-containe},16789 | | | |-{docker-containe},16790 | | | |-{docker-containe},16791 | | | |-{docker-containe},16793 | | | |-{docker-containe},16797 | | | `-{docker-containe},16798 | | |-docker-containe,16877 foobarfoobar/var/run/docker/libcontaine | | | |-metrics-server,16894... | | | | |-{metrics-server},16912 | | | | |-{metrics-server},16913 | | | | |-{metrics-server},16914 | | | | |-{metrics-server},16923 | | | | |-{metrics-server},16924 | | | | `-{metrics-server},23149 | | | |-{docker-containe},16878 | | | |-{docker-containe},16879 | | | |-{docker-containe},16880 | | | |-{docker-containe},16881 | | | |-{docker-containe},16882 | | | |-{docker-containe},16883 | | | |-{docker-containe},16884 | | | `-{docker-containe},16886 | | |-docker-containe,17029 b0hogehogehogehoge/var/run/docker/libcontaine | | | |-pharos-host-upg,17045 --schedule=0 6 * * * --schedule-window=3600s --reboot --drain | | | | |-{pharos-host-upg},17063 | | | | |-{pharos-host-upg},17064 | | | | |-{pharos-host-upg},17065 | | | | |-{pharos-host-upg},17066 | | | | |-{pharos-host-upg},17077 | | | | |-{pharos-host-upg},17078 | | | | `-{pharos-host-upg},17079 | | | |-{docker-containe},17030 | | | |-{docker-containe},17031 | | | |-{docker-containe},17032 | | | |-{docker-containe},17033 | | | |-{docker-containe},17034 | | | |-{docker-containe},17035 | | | |-{docker-containe},17036 | | | `-{docker-containe},17057 | | |-{docker-containe},13714 | | |-{docker-containe},13715 | | |-{docker-containe},13716 | | |-{docker-containe},13717 | | |-{docker-containe},13718 | | |-{docker-containe},13719 | | |-{docker-containe},13722 | | |-{docker-containe},14191 | | |-{docker-containe},14278 | | |-{docker-containe},14282 | | |-{docker-containe},15037 | | |-{docker-containe},15059 | | |-{docker-containe},15063 | | |-{docker-containe},15151 | | |-{docker-containe},15155 | | |-{docker-containe},15474 | | |-{docker-containe},15482 | | |-{docker-containe},15540 | | |-{docker-containe},15556 | | |-{docker-containe},15627 | | |-{docker-containe},16549 | | |-{docker-containe},16656 | | |-{docker-containe},16657 | | |-{docker-containe},16816 | | |-{docker-containe},16905 | | |-{docker-containe},16907 | | |-{docker-containe},17147 | | `-{docker-containe},19213 | |-{dockerd-current},13709 | |-{dockerd-current},13710 | |-{dockerd-current},13711 | |-{dockerd-current},13712 | |-{dockerd-current},13720 | |-{dockerd-current},13721 | |-{dockerd-current},13723 | |-{dockerd-current},13725 | |-{dockerd-current},14238 | |-{dockerd-current},14955 | |-{dockerd-current},14962 | |-{dockerd-current},14963 | `-{dockerd-current},15488 |-kubelet,14881 --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf... | |-{kubelet},14883 | |-{kubelet},14884 | |-{kubelet},14885 | |-{kubelet},14886 | |-{kubelet},14887 | |-{kubelet},14888 | |-{kubelet},14889 | |-{kubelet},14892 | |-{kubelet},14905 | |-{kubelet},14921 | |-{kubelet},14922 | |-{kubelet},14939 | |-{kubelet},14942 | |-{kubelet},15200 | `-{kubelet},15607 |-lvmetad,13575 -f |-master,1092 -w | |-pickup,12724,postfix -l -t unix -u | `-qmgr,1122,postfix -l -t unix -u |-polkitd,320,polkitd --no-debug | |-{polkitd},349 | |-{polkitd},369 | |-{polkitd},392 | |-{polkitd},396 | `-{polkitd},401 |-rsyslogd,891 -n | |-{rsyslogd},895 | `-{rsyslogd},897 |-sshd,1095 -D | `-sshd,12476 |-systemd-journal,231 |-systemd-logind,375 |-systemd-udevd,260 `-tuned,892 -Es /usr/sbin/tuned -l -P |-{tuned},1187 |-{tuned},1188 |-{tuned},1191 `-{tuned},1218
Monitorama AMS 2018の資料リンク集
今週はバタバタだったのでまだ咀嚼できていませんが。
PDX2018に続いて社会派セッションがありましたが、PDXと比べてPrometheusとかAIとかが多めでAlert Fatigueが少なめかなという違いも感じました。
EU開催は5年ぶりということで溜まってたネタもあったのでしょうか。
LTやパネルディスカッションもかなり面白かったです。
一日目(9/4)
You don’t look like an Engineer
Monica Sarbu
https://speakerdeck.com/monicasarbu/you-dont-look-like-an-engineer-2
Nagios, Sensu, Prometheus - Why a change of the framework does not change the mindset
Rick Rackow
Is observability good for our brain? How about post-mortems?
Radu Gheorghe, Rafa? Ku?
https://www.slideshare.net/sematext/is-observability-good-for-your-brain
Unquantified Serendipity: Diversity in Development
Quintessence Anx
https://github.com/quintessence/presentations/blob/master/unquantified-serendipity/unquantified-serendipity.pdf
How to build observability into a serverless application
Yan Cui
https://www.slideshare.net/theburningmonk/how-to-build-observability-into-a-serverless-application
Monitoring what you don't own
Stephen Strowes
https://sdstrowes.co.uk/talks/20180904-sdstrowes-monitorama.pdf
What the NTSB teaches us about incident management & postmortems
Michael Kehoe, Nina Mushiana
https://www.slideshare.net/MichaelKehoe3/what-the-ntsb-teaches-us-about-incident-management-postmortems
A thousand and one postmortems: lessons learned from running complex systems at scale
Alexis Le-Quoc
https://speakerdeck.com/alq/1-001-postmortems-lessons-learned-from-running-complex-systems-at-scale
Lightning Talks
Samplerr - RRDTool 2018
Prometheus at Adobe
Defining Alerting
Nita
Live monitoring and automatic remediation in self care of diabetess
How to become a CTO by killing
二日目(9/5)
Prometheus for Practitioners: Migrating to Prometheus at Fastly
Marcus Barczak
https://speakerdeck.com/ickymettle/prometheus-for-practitioners-migrating-to-prometheus-at-fastly
Rethinking UX for AI-driven Monitoring Tools
Stephen Boak
https://github.com/DataDog/MonitoramaEUDesignForAI
Building a monitoring strategy and gaining consensus
Gregory Parker, Trevor Morgan
Self-hosted & open-source time series analysis for your infrastructure
Alexey Velikiy
Monitoring Serverless Things
Mandy Waite
How AI Helps Observe Decentralised Systems
Dominic Wellington
https://www.slideshare.net/DominicWellington/how-ai-helps-observe-decentralised-systems
Incremental-decremental Methods For Real-Time Monitoring
Panel Discussion
Marcus Barczak, Rick Rackow, Denys Zhdanov, Brad Lhotsky
Monitorama2018のスライドへのリンク集(更新中)
先週はMonitoramaでした。今年も名言名スライドが生まれました。
ひとまずタイムテーブルに沿って公開された資料へのリンクを集めていきます。
Day1
・Optimizing for Learning
Logan McDonald
https://speakerdeck.com/loganmeetsworld/optimizing-for-learning?slide=1
・Serverless and CatOps: Balancing trade-offs in operations and instrumentation
Pam Selle
https://thewebivore.com/serverless-and-catops-slides/
・Mentoring Metrics Engineers: How to Grow and Empower Your Own Monitoring Experts
Zach Musgrave, Angelo Licastro
・The Power of Storytelling
Dawn Parzych
・Principia SLOdica - A Treatise on the Metrology of Service Level Objectives
Jamie Wilkinson
・On-call Simulator! - Building an interactive game for teaching incident response
Franka Schmidt
・Observability: the Hard Parts
Peter Bourgon
https://peter.bourgon.org/observability-the-hard-parts/
・Warning: This Talk Contains Content Known to the State of California to Reduce Alert Fatigue
Aditya Mukerjee
・Monitory Report: I Have Seen Your Observability Future. You Can Choose a Better One.
Ian Bennett
Day2
・Want to solve Over-Monitoring and Alert Fatigue? Create the right incentives!
Kishore Jalleda
SRECon https://www.usenix.org/conference/srecon17europe/program/presentation/jalleda
・Next-Generation Observability for Next-Generation Data: Video, Sensors, Telemetry
Peter Bailis
・Coordination through community: A swarm of friendly slack bots to improve knowledge sharing
Aruna Sankaranarayanan
・Automate Your Context
Andy Domeier
https://www.youtube.com/watch?v=5vbqwTXSvjY
・Slack in the Age of Prometheus
George Luong
・Sparky the fire dog: incident response as code
Tapasweni Pathak
・Reclaim your Time: Automating Canary Analysis
Megan Kanne
https://speakerdeck.com/megankanne/reclaim-your-time-automating-canary-analysis?slide=1
Lightning Talks
Day3
・Achieving Google-levels of Observability into your Application with OpenCensus
Morgan McLean
・The present and future of Serverless observability
Yan Cui
・Putting billions of timeseries to work at Uber with autonomous monitoring
Prateek Rungta
・Building Monitoring tools when you don't own applications or infrastructure
Mercedes Coyle
https://www.slideshare.net/MercedesCoyle/building-open-source-monitoring-tools
・Autoscaling Containers... with Math
Allan Espinosa
KubeCon2016 http://schd.ws/hosted_files/cnkc16/8c/espinosa-autoscaling-presentation.pdf
・Assisted Remediation: By trying to build an autoremediation system, we realized we never actually wanted one
Kale Stedman
・Security through Observability
Dave Cadwallader
blog https://www.honeycomb.io/blog/2018/02/security-through-observability/
・How to include Whistler, Kate Libby, and appreciate that our differences make our teams better.
Beth Cornils
Posts
http://johan.org.uk/sysadmin/blog/2018/06/06/monitorama-2018-pdx-day-1/
https://hackernoon.com/highlights-of-monitorama-pdx-day-1-d07ed6dc816f