センスある構成だと思います。 Sensu だけに。
Introduction 肝障害 引いたので再検査受けに行ったら正常値に戻ってました。みなさまいかがお過ごしでしょうか。 アドカレで話題に上げたこれ の話をしに参りました。 自宅でもほとんど同じ構成で運用しているので、参考になれば幸いですしならなくてもいいです。 InfluxDB と Grafana の話はオマケ程度です。
Sandbox Repository これをベースに作っていきます。 毎度お馴染み Vagrant です。
https://github.com/voltaxic-rift/monitoring-sandbox/tree/sensu-only
構成 ざっくりと
Sensu Go Backend: 監視対象 (Sensu Go Agent) から監視イベントを受け取って、アラートを出したりメトリクスを InfluxDB にブチ込んだりする人
Sensu Go Agent: Sensu Go Backend に登録されている監視コマンドをひたすら実行する人
InfluxDB: 時系列データをひたすら溜め込む人
Grafana: InfluxDB の時系列データを美しく映し出す人
Sensu Go Sensu Go は、Sensu, Inc. が開発する OSS ベースの監視プラットフォームであり、Sensu の後継に位置します。 旧 Sensu と違い、外部ミドルウェア (RabbitMQ と Redis) への依存が完全に排除されているため、運用負荷が著しく軽減されています。 データストアとして etcd を使用しますが、デフォルトで組み込まれているため分散構成も容易に組むことができます。僕は1台で困っていないので組んでいませんが… あと、名の通り Golang 製です。
Setup 監視サーバ Sensu Go CLI と Sensu Go Backend をインストールします。
1 2 3 # at monitor sudo dnf install -y https://packagecloud.io/sensu/stable/packages/el/8/sensu-go-cli-6.6.5-5744.x86_64.rpm/download.rpm sudo dnf install -y https://packagecloud.io/sensu/stable/packages/el/8/sensu-go-backend-6.6.5-5744.x86_64.rpm/download.rpm
backend.yml
を /etc/sensu/
に設置した後、サービスを起動します。 特に編集する箇所はありませんが、無いと動かないので設置しておきます。
1 2 3 # at monitor sudo cp /usr/share/doc/sensu-go-backend-6.6.5/backend.yml.example /etc/sensu/backend.yml sudo systemctl enable --now sensu-backend
Sensu Go Backend の初回起動時はユーザが作成されていませんので、 sensu-backend init
を実行して Admin ユーザを作成します。
1 2 # at monitor sudo SENSU_BACKEND_CLUSTER_ADMIN_USERNAME=admin SENSU_BACKEND_CLUSTER_ADMIN_PASSWORD=admin sensu-backend init
この時点で、 http://localhost:3000
にアクセスして Sensu Go の Web UI を開くことができます。
コマンドも使用したいので、 sensuctl configure
を実行して、Sensu Go CLI が使用する認証情報を作成します。
1 2 # at monitor sensuctl configure -n --username admin --password admin --namespace default --url 'http://localhost:8080'
監視エージェント (めんどくさいので agent VM には指一本触れていませんが、使ってもよいです)
Sensu Go Agent をインストールします。
1 2 # at monitor and agent sudo dnf install -y https://packagecloud.io/sensu/stable/packages/el/8/sensu-go-agent-6.6.5-5744.x86_64.rpm/download.rpm
agent.yml
を /etc/sensu/
に設置した後、サービスを起動します。 2点だけ変更しておく必要があるので、以下のように patch でも当てておきましょう。 どの VM でも同じ設定になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 # at monitor and agent sudo cp /usr/share/doc/sensu-go-agent-6.6.5/agent.yml.example /etc/sensu/agent.yml # patch 入ってないので入れとく sudo dnf install -y patch sudo patch -u /etc/sensu/agent.yml << 'EOS' --- /usr/share/doc/sensu-go-agent-6.6.5/agent.yml.example 2022-02-03 22:52:31.000000000 +0000 +++ /etc/sensu/agent.yml 2022-02-11 07:37:18.933906298 +0000 @@ -6,8 +6,8 @@ ## #name: "hostname" #namespace: "default" -#subscriptions: -# - example +subscriptions: + - system #labels: # example_key: "example value" #annotations: @@ -16,8 +16,8 @@ ## # agent configuration ## -#backend-url: -# - "ws://127.0.0.1:8081" +backend-url: + - "ws://192.168.56.254:8081" #cache-dir: "/var/cache/sensu/sensu-agent" #config-file: "/etc/sensu/agent.yml" #log-level: "warn" # available log levels: panic, fatal, error, warn, info, debug EOS sudo systemctl enable --now sensu-agent
subscriptions
では、購読する Subscription 名を指定します。 web, db など、ロールに基づいて指定しておくのがよいでしょう。 特定の Subscription を購読している Agent にのみ監視コマンドを実行させる、といった用途に使用されます。 とりあえず system
にしてあります。
backend-url
は、名の通り Backend の URL を指定します。 WebSocket で通信するため、URI スキームは ws
か wss
になります。
Sensu Go Agent を起動した時点で、Agent の情報 (Entity) が Backend に自動的に登録されます。
1 2 3 4 [vagrant@monitor ~]$ sensuctl entity list ID Class OS Subscriptions Last Seen ────────── ─────── ─────── ─────────────────────── ──────────────────────────────── monitor agent linux system,entity:monitor 2022-02-11 08:04:04 +0000 UTC
Check の実行 CheckConfig Resource を作成することで、Agent に対して監視を実行させることができます。 例えば CPU 使用率を監視したいとします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 # at monitor cat << 'EOS' > check-cpu-usage.yml --- type: CheckConfig api_version: core/v2 metadata: name: check-cpu-usage spec: command: check-cpu-usage -c 95 -w 85 runtime_assets: - check-cpu-usage subscriptions: - system interval: 60 publish: true --- type: Asset api_version: core/v2 metadata: name: check-cpu-usage annotations: io.sensu.bonsai.url: https://bonsai.sensu.io/assets/sensu/check-cpu-usage io.sensu.bonsai.api_url: https://bonsai.sensu.io/api/v1/assets/sensu/check-cpu-usage io.sensu.bonsai.tier: Community io.sensu.bonsai.version: 0.2.2 io.sensu.bonsai.namespace: sensu io.sensu.bonsai.name: check-cpu-usage io.sensu.bonsai.tags: '' spec: builds: - url: https://assets.bonsai.sensu.io/a7ced27e881989c44522112aa05dd3f25c8f1e49/check-cpu-usage_0.2.2_windows_amd64.tar.gz sha512: 900cfdf28d6088b929c4bf9a121b628971edee5fa5cbc91a6bc1df3bd9a7f8adb1fcfb7b1ad70589ed5b4f5ec87d9a9a3ba95bcf2acda56b0901406f14f69fe7 filters: - entity.system.os == 'windows' - entity.system.arch == 'amd64' - url: https://assets.bonsai.sensu.io/a7ced27e881989c44522112aa05dd3f25c8f1e49/check-cpu-usage_0.2.2_darwin_amd64.tar.gz sha512: db81ee70426114e4cd4b3f180f2b0b1e15b4bffc09d7f2b41a571be2422f4399af3fbd2fa2918b8831909ab4bc2d3f58d0aa0d7b197d3a218b2391bb5c1f6913 filters: - entity.system.os == 'darwin' - entity.system.arch == 'amd64' - url: https://assets.bonsai.sensu.io/a7ced27e881989c44522112aa05dd3f25c8f1e49/check-cpu-usage_0.2.2_linux_armv7.tar.gz sha512: 400aacce297176e69f3a88b0aab0ddfdbe9dd6a37a673cb1774c8d4750a91cf7713a881eef26ea21d200f74cb20818161c773490139e6a6acb92cbd06dee994c filters: - entity.system.os == 'linux' - entity.system.arch == 'armv7' - url: https://assets.bonsai.sensu.io/a7ced27e881989c44522112aa05dd3f25c8f1e49/check-cpu-usage_0.2.2_linux_arm64.tar.gz sha512: bef7802b121ac2a2a5c5ad169d6003f57d8b4f5e83eae998a0e0dd1e7b89678d4a62e678d153edacdd65fd1d0123b5f51308622690455e77cec6deccfa183397 filters: - entity.system.os == 'linux' - entity.system.arch == 'arm64' - url: https://assets.bonsai.sensu.io/a7ced27e881989c44522112aa05dd3f25c8f1e49/check-cpu-usage_0.2.2_linux_386.tar.gz sha512: a2dcb5324952567a61d76a2e331c1c16df69ef0e0b9899515dad8d1531b204076ad0c008f59fc2f4735a5a779afb0c1baa132268c41942b203444e377fe8c8e5 filters: - entity.system.os == 'linux' - entity.system.arch == '386' - url: https://assets.bonsai.sensu.io/a7ced27e881989c44522112aa05dd3f25c8f1e49/check-cpu-usage_0.2.2_linux_amd64.tar.gz sha512: 24539739b5eb19bbab6eda151d0bcc63a0825afdfef3bc1ec3670c7b0a00fbbb2fd006d605a7a038b32269a22026d8947324f2bc0acdf35e8563cf4cb8660d7f filters: - entity.system.os == 'linux' - entity.system.arch == 'amd64' EOS sensuctl create -f check-cpu-usage.yml
上記のような YAML を sensuctl create
で適用すると、各種リソースが作成されます。 後は作成した CheckConfig に従って、Agent が監視コマンドを実行します。
1 2 3 4 [vagrant@monitor ~]$ sensuctl check list Name Command Interval Cron Timeout TTL Subscriptions Handlers Assets Hooks Publish? Stdin? Metric Format Metric Handlers ────────────────── ───────────────────────────── ────────── ────── ───────── ───── ─────────────── ────────── ───────────────── ─────── ────────── ──────── ─────────────── ────────────────── check-cpu-usage check-cpu-usage -c 95 -w 85 60 0 0 system check-cpu-usage true false
1 2 3 4 5 6 7 8 9 [vagrant@monitor ~]$ sensuctl asset list Name URL Hash ────────────────── ───────────────────────────────────────────────────────────────────────── ────────── check-cpu-usage //assets.bonsai.sensu.io/.../check-cpu-usage_0.2.2_windows_amd64.tar.gz 900cfdf check-cpu-usage //assets.bonsai.sensu.io/.../check-cpu-usage_0.2.2_darwin_amd64.tar.gz db81ee7 check-cpu-usage //assets.bonsai.sensu.io/.../check-cpu-usage_0.2.2_linux_armv7.tar.gz 400aacc check-cpu-usage //assets.bonsai.sensu.io/.../check-cpu-usage_0.2.2_linux_arm64.tar.gz bef7802 check-cpu-usage //assets.bonsai.sensu.io/.../check-cpu-usage_0.2.2_linux_386.tar.gz a2dcb53 check-cpu-usage //assets.bonsai.sensu.io/.../check-cpu-usage_0.2.2_linux_amd64.tar.gz 2453973
YAML の量がクソデカいですが、あまり難しくはないです。
CheckConfig 1 2 3 4 5 6 7 8 9 10 11 12 13 --- type: CheckConfig api_version: core/v2 metadata: name: check-cpu-usage spec: command: check-cpu-usage -c 95 -w 85 runtime_assets: - check-cpu-usage subscriptions: - system interval: 60 publish: true
type リソースの種類を指定します。 Check を走らせるので CheckConfig を指定します。
api_version 使用する API バージョンを指定します。core/v2
を使うことがほとんどですが、使用するリソースによっては他のバージョンを指定する必要があります。
リソースの名前を定義します。 type 毎に一意でなければいけません。
spec.command Agent で実行したいコマンドを記述します。
spec.runtime_assets Dynamic runtime asset と呼ばれる、Resource に基づく処理を行う際に動的に使用されるプラグインを指定します。 Asset の説明は後ほど記載しますが、今回は CPU 使用率をチェックするためのコマンドが含まれている Asset を指定しています。
spec.subscriptions Check を走らせる対象の subscription 名を指定します。
spec.interval Check の実行間隔を指定します。 単位は秒です。
spec.publish true にしておくと、リソース作成後に自動的に Check が走るようになります。 false の場合は、 core/v2/checks
に対して手動で Check の実行要求を投げる必要があります。
Asset 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 --- type: Asset api_version: core/v2 metadata: name: check-cpu-usage annotations: io.sensu.bonsai.url: https://bonsai.sensu.io/assets/sensu/check-cpu-usage io.sensu.bonsai.api_url: https://bonsai.sensu.io/api/v1/assets/sensu/check-cpu-usage io.sensu.bonsai.tier: Community io.sensu.bonsai.version: 0.2.2 io.sensu.bonsai.namespace: sensu io.sensu.bonsai.name: check-cpu-usage io.sensu.bonsai.tags: '' spec: builds: - url: https://assets.bonsai.sensu.io/a7ced27e881989c44522112aa05dd3f25c8f1e49/check-cpu-usage_0.2.2_windows_amd64.tar.gz sha512: 900cfdf28d6088b929c4bf9a121b628971edee5fa5cbc91a6bc1df3bd9a7f8adb1fcfb7b1ad70589ed5b4f5ec87d9a9a3ba95bcf2acda56b0901406f14f69fe7 filters: - entity.system.os == 'windows' - entity.system.arch == 'amd64' - url: https://assets.bonsai.sensu.io/a7ced27e881989c44522112aa05dd3f25c8f1e49/check-cpu-usage_0.2.2_darwin_amd64.tar.gz sha512: db81ee70426114e4cd4b3f180f2b0b1e15b4bffc09d7f2b41a571be2422f4399af3fbd2fa2918b8831909ab4bc2d3f58d0aa0d7b197d3a218b2391bb5c1f6913 filters: - entity.system.os == 'darwin' - entity.system.arch == 'amd64' - url: https://assets.bonsai.sensu.io/a7ced27e881989c44522112aa05dd3f25c8f1e49/check-cpu-usage_0.2.2_linux_armv7.tar.gz sha512: 400aacce297176e69f3a88b0aab0ddfdbe9dd6a37a673cb1774c8d4750a91cf7713a881eef26ea21d200f74cb20818161c773490139e6a6acb92cbd06dee994c filters: - entity.system.os == 'linux' - entity.system.arch == 'armv7' - url: https://assets.bonsai.sensu.io/a7ced27e881989c44522112aa05dd3f25c8f1e49/check-cpu-usage_0.2.2_linux_arm64.tar.gz sha512: bef7802b121ac2a2a5c5ad169d6003f57d8b4f5e83eae998a0e0dd1e7b89678d4a62e678d153edacdd65fd1d0123b5f51308622690455e77cec6deccfa183397 filters: - entity.system.os == 'linux' - entity.system.arch == 'arm64' - url: https://assets.bonsai.sensu.io/a7ced27e881989c44522112aa05dd3f25c8f1e49/check-cpu-usage_0.2.2_linux_386.tar.gz sha512: a2dcb5324952567a61d76a2e331c1c16df69ef0e0b9899515dad8d1531b204076ad0c008f59fc2f4735a5a779afb0c1baa132268c41942b203444e377fe8c8e5 filters: - entity.system.os == 'linux' - entity.system.arch == '386' - url: https://assets.bonsai.sensu.io/a7ced27e881989c44522112aa05dd3f25c8f1e49/check-cpu-usage_0.2.2_linux_amd64.tar.gz sha512: 24539739b5eb19bbab6eda151d0bcc63a0825afdfef3bc1ec3670c7b0a00fbbb2fd006d605a7a038b32269a22026d8947324f2bc0acdf35e8563cf4cb8660d7f filters: - entity.system.os == 'linux' - entity.system.arch == 'amd64'
Sensu Go では、Dynamic runtime asset を使用して、Sensu Go で動的に実行できるコマンドを追加することが出来ます。 Dynamic runtime asset は、Bonsai でホストされているものを使用することが一般的ですが、自前でホストした Asset を使用することも可能です。 今回は sensu/check-cpu-usage を使用して CPU 使用率を監視しますが、実行可能ファイルが Agent に存在していればよいので、例えば Nagios Plugins が既に入っている環境であれば、Asset が無くても Check を実行できます。 Check 結果の仕様は Nagios と同じである ため、Nagios 用のプラグインは流用することができます。 なお、上記の YAML は Asset Definition に記載されているものとほとんど同等です。 そのため、Asset Resource を自分で書く必要はありません。 ただし、ラベルを定義しない場合は labels:
を消しておきましょう。怒られるので。
Monitoring as Code YAML ファイルを使用せずに sensuctl check create
を実行して対話的にリソースを作成することもできますが、リソースは可能な限りコードに落とし込んで Git 等で管理しておくと安心できるでしょう。SensuFlow の実装では、Resource のディレクトリ構成は以下のような形になります。
1 2 3 4 5 6 7 8 9 10 11 .sensu/ cluster/ namespaces.yml namespaces/ <namespace>/ checks/ hooks/ filters/ handlers/ handelersets/ mutators/
今回は SensuFlow は使用せずコマンド直打ちでリソースを管理していくので、ディレクトリ構成のみ拝借します。 出来上がったものがこちら にあるので、 sensuctl create -r -f
でまとめて作成してしまいます。
1 2 # at monitor sensuctl create -r -f /vagrant/sensu/namespaces/default/
1 2 3 4 5 6 7 8 [vagrant@monitor ~]$ sensuctl check list Name Command Interval Cron Timeout TTL Subscriptions Handlers Assets Hooks Publish? Stdin? Metric Format Metric Handlers ─────────────────────────── ─────────────────────────────────────────────────────────────────────────────────────────────── ────────── ────── ───────── ───── ─────────────── ────────── ────────────────────────── ─────── ────────── ──────── ─────────────── ────────────────── check-cpu-usage check-cpu-usage -c 95 -w 85 60 0 0 system check-cpu-usage true false check-disk-usage check-disk-usage --include-fs-type "xfs" --exclude-fs-path "/boot" --warning 90 --critical 95 60 0 0 system check-disk-usage true false check-memory-usage check-memory-usage -c 90 -w 80 60 0 0 system check-memory-usage true false check-swap-usage check-swap-usage -c 10 -w 5 60 0 0 system check-memory-usage true false network-interface-checks network-interface-checks 60 0 0 system network-interface-checks true false
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [vagrant@monitor ~]$ sensuctl asset list Name URL Hash ─────────────────────────── ──────────────────────────────────────────────────────────────────────────────── ────────── check-cpu-usage //assets.bonsai.sensu.io/.../check-cpu-usage_0.2.2_windows_amd64.tar.gz 900cfdf check-cpu-usage //assets.bonsai.sensu.io/.../check-cpu-usage_0.2.2_darwin_amd64.tar.gz db81ee7 check-cpu-usage //assets.bonsai.sensu.io/.../check-cpu-usage_0.2.2_linux_armv7.tar.gz 400aacc check-cpu-usage //assets.bonsai.sensu.io/.../check-cpu-usage_0.2.2_linux_arm64.tar.gz bef7802 check-cpu-usage //assets.bonsai.sensu.io/.../check-cpu-usage_0.2.2_linux_386.tar.gz a2dcb53 check-cpu-usage //assets.bonsai.sensu.io/.../check-cpu-usage_0.2.2_linux_amd64.tar.gz 2453973 check-disk-usage //assets.bonsai.sensu.io/.../check-disk-usage_0.6.0_windows_amd64.tar.gz 0b1df35 check-disk-usage //assets.bonsai.sensu.io/.../check-disk-usage_0.6.0_darwin_amd64.tar.gz dcbe199 check-disk-usage //assets.bonsai.sensu.io/.../check-disk-usage_0.6.0_linux_armv7.tar.gz bc382b5 check-disk-usage //assets.bonsai.sensu.io/.../check-disk-usage_0.6.0_linux_arm64.tar.gz 05a0f21 check-disk-usage //assets.bonsai.sensu.io/.../check-disk-usage_0.6.0_linux_386.tar.gz abd1978 check-disk-usage //assets.bonsai.sensu.io/.../check-disk-usage_0.6.0_linux_amd64.tar.gz fa25e31 check-memory-usage //assets.bonsai.sensu.io/.../check-memory-usage_0.2.2_windows_amd64.tar.gz 90a997a check-memory-usage //assets.bonsai.sensu.io/.../check-memory-usage_0.2.2_darwin_amd64.tar.gz 57ebebe check-memory-usage //assets.bonsai.sensu.io/.../check-memory-usage_0.2.2_linux_armv7.tar.gz 6f7d0d2 check-memory-usage //assets.bonsai.sensu.io/.../check-memory-usage_0.2.2_linux_arm64.tar.gz 94a41f3 check-memory-usage //assets.bonsai.sensu.io/.../check-memory-usage_0.2.2_linux_386.tar.gz 125f9c1 check-memory-usage //assets.bonsai.sensu.io/.../check-memory-usage_0.2.2_linux_amd64.tar.gz 663985d network-interface-checks //assets.bonsai.sensu.io/.../network-interface-checks_0.1.0_linux_armv6.tar.gz 45cc807 network-interface-checks //assets.bonsai.sensu.io/.../network-interface-checks_0.1.0_linux_armv7.tar.gz e229dc0 network-interface-checks //assets.bonsai.sensu.io/.../network-interface-checks_0.1.0_linux_arm64.tar.gz 257ea28 network-interface-checks //assets.bonsai.sensu.io/.../network-interface-checks_0.1.0_linux_386.tar.gz 3a50265 network-interface-checks //assets.bonsai.sensu.io/.../network-interface-checks_0.1.0_linux_amd64.tar.gz 7ee8a2a
CheckConfig と Asset がまとめて作成されました。
これらのリソースに変更を加える際、あるいはリソースを削除する際は、YAML ファイルの編集後に再度 sensuctl create -r -f
を実行します。 ただし、 sensuctl create
だけではコードから削除したリソースが残ったままになってしまいます。 そのため sensuctl prune
を実行して削除する必要があります。
1 2 3 # at monitor sensuctl create -r -f /vagrant/sensu/namespaces/default/ sensuctl prune checks,handlers,filters,mutators,assets,secrets/v1.Secret,roles,role-bindings,core/v2.HookConfig -r -f /vagrant/sensu/namespaces/default/
これで、手元のコードと Backend に登録されているリソースが同期されます。 なげーので Script 化して CI で回すとかしておくとよいでしょう。 SensuFlow ではもっと丁寧にやっていますが、現状は上記のような手順でも困ることはなさそうです。
InfluxDB Sensu Go での監視は一通り完了しましたが、監視で取得した結果はメトリクスとして DB に格納しておいて、後から確認できるようにしておくべきでしょう。 これは Sensu Go だけではできないので、InfluxDB に時系列データとして無限に突っ込んでおくのがよいです。
Setup sensu-influxdb-handler が InfluxDB 2 系に対応していない ので、当面は 1.8 を使用する必要があります。
1 2 3 4 5 6 # at monitor sudo dnf install -y https://dl.influxdata.com/influxdb/releases/influxdb-1.8.10.x86_64.rpm sudo systemctl enable --now influxdb # Sensu Go で使用する DB を作成 influx -execute 'create database sensu'
Sensu Observability Pipeline Observability Pipeline は、Entity (Agent) の登録から Check の実行 -> Check 結果のフィルタ -> 加工 -> 処理 (TSDB への格納、Slack の通知など) を実行する Sensu Go での一連の流れを表す概念です。 Observability Pipeline に従い Resource を定義することで、保守性と可観測性を担保したシステム監視を実現できます。
メトリクスの保存 というワケで、Check の実行で得たメトリクスを InfluxDB に格納していきます。 Check 結果からメトリクスを取得するためには、Output の形式が以下4種類のいずれかに準拠していなければなりません。
Nagios Performance Data
Prometheus Exposition Format
Graphite Plaintext Protocol
InfluxDB Line Protocol
現在登録している CheckConfig のうち、check-disk-usage 以外は上記の形式で出力されていますので、check-disk-usage のみ修正してしまいましょう。
1 check-disk-usage OK: / 11.06% - Total: 19 GB, Used: 2.1 GB, Free: 17 GB
以下の通り patch を当てます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 # at monitor patch -u /vagrant/sensu/namespaces/default/checks/check-disk-usage.yml << 'EOS' diff --git a/sensu/namespaces/default/checks/check-disk-usage.yml b/sensu/namespaces/default/checks/check-disk-usage.yml index e8237ff..396b35f 100644 --- a/sensu/namespaces/default/checks/check-disk-usage.yml +++ b/sensu/namespaces/default/checks/check-disk-usage.yml @@ -4,7 +4,7 @@ api_version: core/v2 metadata: name: check-disk-usage spec: - command: check-disk-usage --include-fs-type "xfs" --exclude-fs-path "/boot" --warning 90 --critical 95 + command: check-disk-usage --include-fs-type "xfs" --exclude-fs-path "/boot" --warning 90 --critical 95 --metrics runtime_assets: - check-disk-usage subscriptions: @@ -17,42 +17,42 @@ api_version: core/v2 metadata: name: check-disk-usage annotations: - io.sensu.bonsai.url: https://bonsai.sensu.io/assets/sensu/check-disk-usage - io.sensu.bonsai.api_url: https://bonsai.sensu.io/api/v1/assets/sensu/check-disk-usage - io.sensu.bonsai.tier: Supported - io.sensu.bonsai.version: 0.6.0 - io.sensu.bonsai.namespace: sensu + io.sensu.bonsai.url: https://bonsai.sensu.io/assets/jadiunr/check-disk-usage + io.sensu.bonsai.api_url: https://bonsai.sensu.io/api/v1/assets/jadiunr/check-disk-usage + io.sensu.bonsai.tier: Community + io.sensu.bonsai.version: 0.6.1 + io.sensu.bonsai.namespace: jadiunr io.sensu.bonsai.name: check-disk-usage io.sensu.bonsai.tags: '' spec: builds: - - url: https://assets.bonsai.sensu.io/c06ba5a541026092d685e4d54b76c490801b9919/check-disk-usage_0.6.0_windows_amd64.tar.gz - sha512: 0b1df35dc409f7dc8ea849c828036983a5759b6c6ed5940ff1a491b17eb60ca73349dfa9dada73acde0f653a8267c119853771f03b729fd4a95c81e817f9cedb + - url: https://assets.bonsai.sensu.io/6fb1d63d9bacf54268c37a2ee01555f1f616efd0/check-disk-usage_0.6.1_windows_amd64.tar.gz + sha512: 6bed33f25df0ebfeeffe24364f3ea7f67fca371c96f3121436ef2895482009321dea5d0c19168be082cc5428968050c0e6c8dd7ddbdfdb7a6cbbe9c8d0f3c0d8 filters: - entity.system.os == 'windows' - entity.system.arch == 'amd64' - - url: https://assets.bonsai.sensu.io/c06ba5a541026092d685e4d54b76c490801b9919/check-disk-usage_0.6.0_darwin_amd64.tar.gz - sha512: dcbe19998d1804c8708836c3ec0a7568442ed8f9b33d7d430dc4e1ef59e37f516648b3147344e79c6deb2ad095f588971e37de1f9f9ef1fac558eacc21c184c7 + - url: https://assets.bonsai.sensu.io/6fb1d63d9bacf54268c37a2ee01555f1f616efd0/check-disk-usage_0.6.1_darwin_amd64.tar.gz + sha512: 3b886514771b86a39cfe49af6dd4333dee668327ee0dda80601ed6cee105b74a3d0b8fb2cfe998d3025c80027223d458f9f6f17f29f46dd44572179a8137c249 filters: - entity.system.os == 'darwin' - entity.system.arch == 'amd64' - - url: https://assets.bonsai.sensu.io/c06ba5a541026092d685e4d54b76c490801b9919/check-disk-usage_0.6.0_linux_armv7.tar.gz - sha512: bc382b5b8c9bc70a3be64f4af6686640a852417696357fafcc63faa0f2f7538475cb847444ddcbb3c9486a40725e21a3a2a8c2e3493ff6a0bdfb6d5458ebd683 + - url: https://assets.bonsai.sensu.io/6fb1d63d9bacf54268c37a2ee01555f1f616efd0/check-disk-usage_0.6.1_linux_armv7.tar.gz + sha512: dfb90f45df39659a22d71087bb231f72667f290515cc9b177e782419dbe1295974f6b5af2839283d825ed0c8f9566ae4a1e21b1585dc5ab5779f65c45c8b6131 filters: - entity.system.os == 'linux' - entity.system.arch == 'armv7' - - url: https://assets.bonsai.sensu.io/c06ba5a541026092d685e4d54b76c490801b9919/check-disk-usage_0.6.0_linux_arm64.tar.gz - sha512: 05a0f21ccd93a418eedc596b3b8257a7d34f521e13b8de0d9621c25782829b082391a670e8705f792cd03eddfd36fc965afc6ea3f0f0923202abaebbaabf5467 + - url: https://assets.bonsai.sensu.io/6fb1d63d9bacf54268c37a2ee01555f1f616efd0/check-disk-usage_0.6.1_linux_arm64.tar.gz + sha512: c596f3dcb693d56a7656cfd8c145e67daba90efde9caf74a4ceb3bf7abb24d82206b5fe70feb8b45e9bf3dd9fd71bb9aa10c67e2a4295841287ff5b062e976c7 filters: - entity.system.os == 'linux' - entity.system.arch == 'arm64' - - url: https://assets.bonsai.sensu.io/c06ba5a541026092d685e4d54b76c490801b9919/check-disk-usage_0.6.0_linux_386.tar.gz - sha512: abd19787ac7c81d99058e48ce678e22dee866bae15d587431838f449876fac255f8c1e8c738342225e459b363af5f8b3b22171c9bc858605ea7bebbf143933e4 + - url: https://assets.bonsai.sensu.io/6fb1d63d9bacf54268c37a2ee01555f1f616efd0/check-disk-usage_0.6.1_linux_386.tar.gz + sha512: 7a001fb98ff1d3f85218ace6c2c05aba752807b021d2e553658811df72449b851e9b758e534206491bc4f8a4c7a9f3b3d02ee44a9e48f13e392e96c569e13f97 filters: - entity.system.os == 'linux' - entity.system.arch == '386' - - url: https://assets.bonsai.sensu.io/c06ba5a541026092d685e4d54b76c490801b9919/check-disk-usage_0.6.0_linux_amd64.tar.gz - sha512: fa25e317ba8aa3e23d9e3d3c54081ca4529aeba2e7ee437a2bf1ed8cfb3fbf70cd0380eb8cc427a9be17515e437f6346949381cc7ce47f37493e32eb8372ded8 + - url: https://assets.bonsai.sensu.io/6fb1d63d9bacf54268c37a2ee01555f1f616efd0/check-disk-usage_0.6.1_linux_amd64.tar.gz + sha512: 722e94d473d613f75a9d0d501ad86fd7d450bdfeed25b52da2a6ec8902660bb9bc68fb38ba3a1f35ea7681b719acfc9c28d5641388900b1bfe201612b919922e filters: - entity.system.os == 'linux' - entity.system.arch == 'amd64' EOS /vagrant/sensuflow.sh
check-disk-usage は --metrics
オプションを付けることで、Prometheus Exposition Format でメトリクスを出力できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 # HELP disk_critical [GAUGE] non-zero value indicates mountpoint usage is above critical threshold # TYPE disk_critical GAUGE disk_critical{mountpoint="/"} 0 1644577780190 disk_critical{mountpoint="any"} 0 1644577780190 # HELP disk_warning [GAUGE] non-zero value indicates mountpoint usage is above warning threshold # TYPE disk_warning GAUGE disk_warning{mountpoint="/"} 0 1644577780190 disk_warning{mountpoint="any"} 0 1644577780190 # HELP disk_percent_usage [GAUGE] Percentage of mounted volume used # TYPE disk_percent_usage GAUGE disk_percent_usage{mountpoint="/"} 11.199096496470066 1644577780190 # HELP disk_total_bytes [GAUGE] Total size in bytes of mounted volumed # TYPE disk_total_bytes GAUGE disk_total_bytes{mountpoint="/"} 1.8862833664e+10 1644577780190 # HELP disk_used_bytes [GAUGE] Used size in bytes of mounted volumed # TYPE disk_used_bytes GAUGE disk_used_bytes{mountpoint="/"} 2.112466944e+09 1644577780190 # HELP disk_free_bytes [GAUGE] Free size in bytes of mounted volumed # TYPE disk_free_bytes GAUGE disk_free_bytes{mountpoint="/"} 1.675036672e+10 1644577780190
Prometheus Exposition Format では Timestamp の精度はミリ秒単位であることが求められます (あるいは Timestamp を省いてもよい) が、sensu/check-disk-usage 0.6.0 は秒単位で出力されてしまうため、Sensu Go でメトリクスをパースすると Timestamp が狂ってしまいます。 まだ修正されていないので、上記 patch にて jadiunr/check-disk-usage を使用するように変更しています。
すべての Check 結果のメトリクスを Sensu Go でパースできるようになったので、InfluxDB に格納するための Pipeline を作成します。
Handler 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 # at monitor mkdir -p /vagrant/sensu/namespaces/default/handlers/ cat << 'EOS' > /vagrant/sensu/namespaces/default/handlers/influxdb.yml --- type: Handler api_version: core/v2 metadata: name: influxdb spec: command: sensu-influxdb-handler -d sensu -c runtime_assets: - sensu-influxdb-handler type: pipe --- type: Asset api_version: core/v2 metadata: name: sensu-influxdb-handler annotations: io.sensu.bonsai.url: https://bonsai.sensu.io/assets/sensu/sensu-influxdb-handler io.sensu.bonsai.api_url: https://bonsai.sensu.io/api/v1/assets/sensu/sensu-influxdb-handler io.sensu.bonsai.tier: Supported io.sensu.bonsai.version: 3.7.0 io.sensu.bonsai.namespace: sensu io.sensu.bonsai.name: sensu-influxdb-handler io.sensu.bonsai.tags: '' spec: builds: - url: https://assets.bonsai.sensu.io/0e75f54fc34c4f6b3439362256983203f1b6c8ca/sensu-influxdb-handler_3.7.0_linux_386.tar.gz sha512: 6719527e1b720ec0ba2b15a7a043e7860135cf31483c3812f14659bde92123c89b8edd85a9cd23abffb5bb31caf6e84b5b45dc5605f87bdee30f59c4b8feada7 filters: - entity.system.os == 'linux' - entity.system.arch == '386' - url: https://assets.bonsai.sensu.io/0e75f54fc34c4f6b3439362256983203f1b6c8ca/sensu-influxdb-handler_3.7.0_linux_amd64.tar.gz sha512: d05650d778f8e9427eca155455fb20a73a996dc46df240a7b84978385bdeeddfa46a624add5d43bed93f08c1b076e0d7ba350df8c3deb08bc007bc3630777a52 filters: - entity.system.os == 'linux' - entity.system.arch == 'amd64' - url: https://assets.bonsai.sensu.io/0e75f54fc34c4f6b3439362256983203f1b6c8ca/sensu-influxdb-handler_3.7.0_linux_armv7.tar.gz sha512: 38918c179574df64f9ee3a80b3dd9566ff0bc924d75b81742d11f42a39f4f353a6eec7eee3f6536109413408dadeb24aa54dcbe5a295f0de26af8d3e12b2dca6 filters: - entity.system.os == 'linux' - entity.system.arch == 'armv7' - url: https://assets.bonsai.sensu.io/0e75f54fc34c4f6b3439362256983203f1b6c8ca/sensu-influxdb-handler_3.7.0_linux_arm64.tar.gz sha512: 944075ff9a8525b7633f5685d5f0785df098fa7a0a07f0b444b25fe76b80155c13a867fc6cea2b3f7996a6509683ed5f5bc962337ef6114edad90ec57dbe91fb filters: - entity.system.os == 'linux' - entity.system.arch == 'arm64' - url: https://assets.bonsai.sensu.io/0e75f54fc34c4f6b3439362256983203f1b6c8ca/sensu-influxdb-handler_3.7.0_windows_amd64.tar.gz sha512: 8228cbcf622cdca512e828de5f474f5d0e86017921116fa6e7463d78c142a981484f5dc6138f48796d89d5866b162ef8835ddc677f697ef5a4322d7d939f681d filters: - entity.system.os == 'windows' - entity.system.arch == 'amd64' - url: https://assets.bonsai.sensu.io/0e75f54fc34c4f6b3439362256983203f1b6c8ca/sensu-influxdb-handler_3.7.0_darwin_amd64.tar.gz sha512: 7c73e1d8d57aab24b12e6a26d4a3bef11dbaecc895e08ef2e9b3df87ac3202ec6a0e34012225f13aca11ea7f5e3bf8ec565507ed9c28a0f74e47ce9defe22a57 filters: - entity.system.os == 'darwin' - entity.system.arch == 'amd64' EOS
spec.type
は pipe
を指定します。 名の通り Check の出力が標準入力を介して sensu-influxdb-handler コマンドに渡されます。
Pipeline Pipeline リソースは、EventFilter, Mutator, Handler を紐付けるために使用します。 それぞれ、Observability Pipeline において Filter, Transform, Process を担当します。 上記3種のリソースは、1組の Workflow として複数定義することができます。 今回は1組のみで Handler しか使いませんが。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # at monitor mkdir -p /vagrant/sensu/namespaces/default/pipelines/ cat << 'EOS' > /vagrant/sensu/namespaces/default/pipelines/store-metrics.yml --- type: Pipeline api_version: core/v2 metadata: name: store-metrics spec: workflows: - name: store-metrics filters: - name: has_metrics type: EventFilter api_version: core/v2 handler: name: influxdb type: Handler api_version: core/v2 EOS
spec.workflows パイプラインで使用する Workflow を定義します。
spec.workflows[].name Workflow の名前を定義します。 わかりやすい名前にしておくとよいです。
spec.workflows[].filters Workflow で使用する Filter を指定します。has_metrics
は Sensu Go ビルトインの Filter で、渡された Event リソースに Metrics が含まれているものだけを使用するようにフィルタリングします。
spec.workflows[].handler 使用する Handler を指定します。 先ほど作成した InfluxDB Handler を指定します。
Check で Pipeline を使用する 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 # at monitor patch -u /vagrant/sensu/namespaces/default/checks/check-cpu-usage.yml << 'EOS' diff --git a/sensu/namespaces/default/checks/check-cpu-usage.yml b/sensu/namespaces/default/checks/check-cpu-usage.yml index d4c4f0b..fb10356 100644 --- a/sensu/namespaces/default/checks/check-cpu-usage.yml +++ b/sensu/namespaces/default/checks/check-cpu-usage.yml @@ -5,6 +5,11 @@ metadata: name: check-cpu-usage spec: command: check-cpu-usage -c 95 -w 85 + output_metric_format: nagios_perfdata + pipelines: + - api_version: core/v2 + name: store-metrics + type: Pipeline runtime_assets: - check-cpu-usage subscriptions: EOS patch -u /vagrant/sensu/namespaces/default/checks/check-disk-usage.yml << 'EOS' diff --git a/sensu/namespaces/default/checks/check-disk-usage.yml b/sensu/namespaces/default/checks/check-disk-usage.yml index 396b35f..af63059 100644 --- a/sensu/namespaces/default/checks/check-disk-usage.yml +++ b/sensu/namespaces/default/checks/check-disk-usage.yml @@ -5,6 +5,11 @@ metadata: name: check-disk-usage spec: command: check-disk-usage --include-fs-type "xfs" --exclude-fs-path "/boot" --warning 90 --critical 95 --metrics + output_metric_format: prometheus_text + pipelines: + - api_version: core/v2 + name: store-metrics + type: Pipeline runtime_assets: - check-disk-usage subscriptions: EOS patch -u /vagrant/sensu/namespaces/default/checks/check-memory-usage.yml << 'EOS' diff --git a/sensu/namespaces/default/checks/check-memory-usage.yml b/sensu/namespaces/default/checks/check-memory-usage.yml index a8d9252..ba9c085 100644 --- a/sensu/namespaces/default/checks/check-memory-usage.yml +++ b/sensu/namespaces/default/checks/check-memory-usage.yml @@ -5,6 +5,11 @@ metadata: name: check-memory-usage spec: command: check-memory-usage -c 90 -w 80 + output_metric_format: nagios_perfdata + pipelines: + - api_version: core/v2 + name: store-metrics + type: Pipeline runtime_assets: - check-memory-usage subscriptions: @@ -18,6 +23,11 @@ metadata: name: check-swap-usage spec: command: check-swap-usage -c 10 -w 5 + output_metric_format: nagios_perfdata + pipelines: + - api_version: core/v2 + name: store-metrics + type: Pipeline runtime_assets: - check-memory-usage subscriptions: EOS patch -u /vagrant/sensu/namespaces/default/checks/network-interface-checks.yml << 'EOS' diff --git a/sensu/namespaces/default/checks/network-interface-checks.yml b/sensu/namespaces/default/checks/network-interface-checks.yml index 88a377e..8118820 100644 --- a/sensu/namespaces/default/checks/network-interface-checks.yml +++ b/sensu/namespaces/default/checks/network-interface-checks.yml @@ -5,6 +5,11 @@ metadata: name: network-interface-checks spec: command: network-interface-checks + output_metric_format: prometheus_text + pipelines: + - api_version: core/v2 + name: store-metrics + type: Pipeline runtime_assets: - network-interface-checks subscriptions: EOS
output_metric_format
では、Check 出力のフォーマットを指定します。 Nagios Performance Data で出力されているものは nagios_perfdata
、Prometheus であれば prometheus_text
を指定する必要があります。pipelines
には、先ほど作成した Pipeline を指定することで、Check 出力が Pipeline に渡されるようになります。 最後に sensuflow.sh
を実行して Resource を同期させれば完了です。
確認 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 [vagrant@monitor ~]$ influx -database sensu -precision rfc3339 Connected to http://localhost:8086 version 1.8.10 InfluxDB shell version: 1.8.10 > show series key --- bytes_recv,interface=enp0s3,prom_type=counter,sensu_entity_name=monitor bytes_recv,interface=enp0s8,prom_type=counter,sensu_entity_name=monitor bytes_sent,interface=enp0s3,prom_type=counter,sensu_entity_name=monitor bytes_sent,interface=enp0s8,prom_type=counter,sensu_entity_name=monitor check-cpu-usage,sensu_entity_name=monitor check-disk-usage,sensu_entity_name=monitor check-memory-usage,sensu_entity_name=monitor check-swap-usage,sensu_entity_name=monitor cpu_guest,sensu_entity_name=monitor cpu_guestnice,sensu_entity_name=monitor cpu_idle,sensu_entity_name=monitor cpu_iowait,sensu_entity_name=monitor cpu_irq,sensu_entity_name=monitor cpu_nice,sensu_entity_name=monitor cpu_softirq,sensu_entity_name=monitor cpu_steal,sensu_entity_name=monitor cpu_system,sensu_entity_name=monitor cpu_user,sensu_entity_name=monitor disk_critical,mountpoint=/,prom_type=gauge,sensu_entity_name=monitor disk_critical,mountpoint=any,prom_type=gauge,sensu_entity_name=monitor disk_free_bytes,mountpoint=/,prom_type=gauge,sensu_entity_name=monitor disk_percent_usage,mountpoint=/,prom_type=gauge,sensu_entity_name=monitor disk_total_bytes,mountpoint=/,prom_type=gauge,sensu_entity_name=monitor disk_used_bytes,mountpoint=/,prom_type=gauge,sensu_entity_name=monitor disk_warning,mountpoint=/,prom_type=gauge,sensu_entity_name=monitor disk_warning,mountpoint=any,prom_type=gauge,sensu_entity_name=monitor drop_in,interface=enp0s3,prom_type=counter,sensu_entity_name=monitor drop_in,interface=enp0s8,prom_type=counter,sensu_entity_name=monitor drop_out,interface=enp0s3,prom_type=counter,sensu_entity_name=monitor drop_out,interface=enp0s8,prom_type=counter,sensu_entity_name=monitor err_in,interface=enp0s3,prom_type=counter,sensu_entity_name=monitor err_in,interface=enp0s8,prom_type=counter,sensu_entity_name=monitor err_out,interface=enp0s3,prom_type=counter,sensu_entity_name=monitor err_out,interface=enp0s8,prom_type=counter,sensu_entity_name=monitor mem_available,sensu_entity_name=monitor mem_free,sensu_entity_name=monitor mem_total,sensu_entity_name=monitor mem_used,sensu_entity_name=monitor network-interface-checks,sensu_entity_name=monitor packets_recv,interface=enp0s3,prom_type=counter,sensu_entity_name=monitor packets_recv,interface=enp0s8,prom_type=counter,sensu_entity_name=monitor packets_sent,interface=enp0s3,prom_type=counter,sensu_entity_name=monitor packets_sent,interface=enp0s8,prom_type=counter,sensu_entity_name=monitor swap_free,sensu_entity_name=monitor swap_total,sensu_entity_name=monitor swap_used,sensu_entity_name=monitor > select * from cpu_idle name: cpu_idle time sensu_entity_name value ---- ----------------- ----- 2022-02-11T12:13:55Z monitor 99.5 2022-02-11T12:14:55Z monitor 99.62
メトリクスが格納されていることが確認できました。 InfluxDB を長期運用する際は、ストレージが逼迫しないように対策しておくとよいです。https://docs.influxdata.com/influxdb/v1.8/guides/downsample_and_retain/
Slack の Handler も提供されていますので、Pipeline を組んで通知させてみてもよいでしょう。
Keepalive event handlers Keepalive の結果も Handler に渡せるので、InfluxDB にメトリクスとして突っ込んでおきます。 このメトリクスは、後ほど Grafana で使用します。
1 2 3 4 5 6 7 8 9 10 11 12 # at monitor cat << 'EOS' > /vagrant/sensu/namespaces/default/handlers/keepalive.yml --- type: Handler api_version: core/v2 metadata: name: keepalive spec: handlers: - influxdb type: set EOS
Handler から Handler を使用する際は、 type
を set
にします。
Grafana データの可視化ツールといえば Grafana が999割なので、Grafana を使用します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 # at monitor sudo dnf install -y https://dl.grafana.com/oss/release/grafana-8.3.4-1.x86_64.rpm sudo patch -u /etc/grafana/grafana.ini << 'EOS' --- /etc/grafana/grafana.ini 2022-02-11 12:21:16.888927633 +0000 +++ /vagrant/grafana.ini 2022-02-09 20:29:59.528174625 +0000 @@ -35,7 +35,7 @@ ;http_addr = # The http port to use -;http_port = 3000 +http_port = 3001 # The public facing domain name used to access grafana from a browser ;domain = localhost @@ -389,13 +389,13 @@ #################################### Anonymous Auth ###################### [auth.anonymous] # enable anonymous access -;enabled = false +enabled = true # specify organization name that should be used for unauthenticated users ;org_name = Main Org. # specify role for unauthenticated users -;org_role = Viewer +org_role = Admin # mask the Grafana version number for unauthenticated users ;hide_version = false EOS sudo systemctl enable --now grafana-server
Port 3000 は Sensu Go に握られているので 3001 を使用します。 あと、だるいので認証も切りますが、真面目に使う際は切ってはいけません。
Grafonnet & Grizzly ポチポチして Dashboard を作ってもよいのですが、再現性が最悪なので JSON をブチ当てて Dashboard を作ります。 ですが Grafana の JSON は余裕で1000行を超過してまうので、これまた最悪です。 Dashboard もコードとして管理できたほうが嬉しいので、Jsonnet を使用して Grafonnet と Grizzly で JSON を作成することにします。 Jsonnet 周りは Docker と Docker Compose を使っていますので、ホストマシンで実行しましょう。 コードはリポジトリにあるものを実行するだけです。
API キー生成 Grafana の API を叩くので作っておきます。https://grafana.com/docs/grafana/latest/http_api/auth/#create-api-token
Role は Admin にしておきましょう。
grr apply 実行 1 2 3 4 5 6 7 8 9 # at HOST MACHINE cd grafana cp .env.sample .env # API キー記述 vim .env docker-compose build docker-compose run --rm grr jb install docker-compose run --rm grr grr apply grr.jsonnet
1 2 3 4 5 6 7 [jadiunr@j-aerog grafana]$ docker-compose run --rm grr jb install GET https://github.com/grafana/grafonnet-lib/archive/3626fc4dc2326931c530861ac5bebe39444f6cbf.tar.gz 200 GET https://github.com/grafana/jsonnet-libs/archive/5a128df878434da37969b811e99bb9cd0a3779e3.tar.gz 200 [jadiunr@j-aerog grafana]$ docker-compose run --rm grr grr apply grr.jsonnet INFO[0000] Applying 2 resources Datasource.influxdb_sensu added Dashboard.system added
このように、コマンド1発で Dashboard が作成されます。 1発ではないですが。
Jsonnet 周りは… 解説する気が全く起きないので Document を読んでください。 もう1000行行きそうなので
https://jsonnet.org/ https://grafana.github.io/grafonnet-lib/ https://grafana.github.io/grizzly/
Sensu Go OSS V.S. Sensu Go Enterprise これまで扱ってきた Sensu Go は Enterprise 版になります。 Enterprise 版は、登録できる Entity の数が100件までに制限されているため、100件を超える場合は札束で殴るか OSS 版を使用しなければなりません。 なお、OSS 版を使用する場合はソースからビルドする必要があります。
Enterprise 版と異なる点は多くありますが、まず Web UI が事実上ありません。OSS 版の Web UI は開発が停止しているためです。 また、検索機能も無いので、OSS 版 Web UI を使用したとしてもリソースの検索ができません。sensuctl prune
も商用機能であるため、Shell Script で頑張る等の自前実装が必要です。 監視プラットフォームに Web UI が無いのは致命的であるため、大規模な監視基盤を構築するのであればライセンス契約を結ぶのが無難でしょうか。 とはいえ、Sensu Go は水平スケールが可能、かつメンテナンス性が非常に高いため、監視基盤として採用するのは全く問題ないでしょう。 問題は TSDB の方ですが、InfluxDB は Enterprise 版でも分散構成に頭を悩ませる気がしないでもないです。 Grafana も後ろに RDB が必要なので、スケーラビリティを考えるとどうしても骨になってしまいますね。
まとめ 以上、Sensu Go と InfluxDB と Grafana でいい感じに監視基盤を作る話でした。 みんなも監視組人 (かんしくみんちゅ) になろう。
Q. Prometheus じゃあかんのか? A. アホなので Prometheus わかりません。