Sensuとは
Sensu is a complete solution for monitoring and observability at scale. Sensu Go is designed to give you visibility into everything you care about: traditional server closets, containers, applications, the cloud, and more.
Sensuは、大規模な監視と観測のための完全なソリューションです。Sensu Goは、従来のサーバークローゼット、コンテナ、アプリケーション、クラウドなど、気になるものをすべて可視化できるように設計されています。
Go言語で書かれた実装がSensu Go
となります。
Sensu Goには商用版とOSS版があります。機能の差異があるのと、バイナリ提供が商用版のみで、OSS版はソースからビルドする必要があります。今回はOSS版のビルドから実際に試してみました。
環境
- Raspberry Pi 4
Sensu Goのビルド
Dockerコンテナ内でビルドします。
docker run -it --rm -v $PWD:/work golang:1.19
次のコマンドはコンテナ内で実行
cd /tmp
git clone https://github.com/sensu/sensu-go.git -b v6.8.0
cd sensu-go
CGO_ENABLED=0 go build -o /work/bin/sensu-agent ./cmd/sensu-agent
CGO_ENABLED=0 go build -o /work/bin/sensu-backend ./cmd/sensu-backend
CGO_ENABLED=0 go build -o /work/bin/sensuctl ./cmd/sensuctl
exit
ポイント:main
ブランチではなくリリースブランチのv6.8.0
を使う
一日ハマったのですが、mainブランチは組み込みetcdを削除する途中のようで、backendサーバーがどうしても起動させられませんでした。
そのため、リリース版のv6.8.0
を使いましょう。
Remove support for embedded etcd (#4704)
This is a substantial breaking commit. It removes several etcd configuration options for configuring embedded etcd clustering. At one time, this was the only way that sensu-go worked. We've learned that embedded etcd introduces a lot of operational fragility, and are now mandating that etcd be an external dependency. To improve hackability and developer velocity, there is now a zero-dependency developer mode for sensu-go. The developer mode makes use of a single-node etcd instance, but we reserve the right to change it to something else in the future of the 7 series releases.
これは実質的なブレークスルーとなるコミットです。このコミットでは、組み込みの etcd クラスタリングを設定するためのいくつかの etcd の設定オプションを削除します。一時期、これが sensu-go の唯一の動作方法でした。 埋め込みetcdは多くの運用上の脆弱性をもたらすことを学びました。ということがわかり、etcdを外部依存とすることを義務付けました。 ハッキングのしやすさと開発者の速度を向上させるために、現在、sensu-goにはゼロ依存の開発者モードがあります。sensu-go にはゼロディペンデンシー開発者モードがあります。この開発者モードでは 開発者モードでは、シングルノードのetcdインスタンスを使用しますが、将来的に他のものに変更する権利を留保しています。開発者モードはシングルノードのetcdインスタンスを利用しますが、将来7シリーズをリリースする際に他のものに変更する権利を留保します。 www.DeepL.com/Translator (無料版)で翻訳しました。
ポイント:Goのスタティックビルドを行う。
Goのことはよくわかりませんが、普通にビルドすると動的リンクになるようです。コンテナ内でビルドしたバイナリを他の環境で利用したいので、静的リンクにする必要があります。
静的リンクにするにはgo build
の際に環境変数CGO_ENABLED=0
を指定して実行します。
参考サイト:golangで書いたアプリケーションのstatic link化
sensu-backend
sensu-agent
sensuctl
の3つのバイナリが生成されました。
Sensu GoのDockerイメージを作成
Dockerfileが公式で用意されているのでこれを使用します。
- Clone
git clone https://github.com/sensu/sensu-docker.git
cd sensu-docker
mkdir -p target/linux/arm64
cp ../bin/* target/linux/arm64/
docker build . --build-arg TARGETPLATFORM=linux/arm64 --file dockerfiles/alpine/Dockerfile -t sensu
ポイント:TARGETPLATFORMを明示的に指定
buildxでマルチアーキテクチャに対応したビルドを行うようになっているようですが、今回は単一のアーキテクチャ用にbuildします。そのため、TARGETPLATFORM
を環境変数で指定してビルドを実行しています。
これでSensu Goのコンテナイメージが作成できました。
Sensu Go WebのDockerイメージを作成
商用版のSensu GoにはWeb UIが含まれていますが、OSS版には含まれていないので、別で用意します。 また、商用版と同じ機能が提供されるわけではなさそうです。
This project does not aim to provide a web-based interface for every feature of the open-source Sensu Go platform, specifically including the configuration of Sensu Go pipelines.
このプロジェクトは、オープンソースのSensu Goプラットフォームのすべての機能、特にSensu Goパイプラインの設定を含む、Webベースのインタフェースを提供することを目的としていません。
Dockerfileは用意されていないので作成しました。
cd ..
sensu-go-web/Dockerfile
FROM node:14-alpine
RUN apk add --no-cache git tini
RUN mkdir -p /opt/sensu && \
chown -R node.node /opt/sensu
USER node
WORKDIR /opt/sensu
RUN git clone https://github.com/sensu/web.git -b v1.2.1
WORKDIR /opt/sensu/web
RUN yarn install \
--frozen-lockfile \
--network-timeout 600000 \
--production=false && \
yarn cache clean
USER node
WORKDIR /opt/sensu/web
ENTRYPOINT ["/sbin/tini", "--"]
CMD [ "yarn", "node", "scripts", "serve" ]
docker build ./sensu-go-web --file sensu-go-web/Dockerfile -t sensu-go-web
Sensu Goの起動
Networkの作成
docker network create sensu-net
Volumeの作成
docker volume create sensu-backend-data
Sensu Go Backendの起動
docker run -it --rm --name sensu-backend \
--network sensu-net \
-e SENSU_BACKEND_CLUSTER_ADMIN_USERNAME=admin \
-e SENSU_BACKEND_CLUSTER_ADMIN_PASSWORD=admin \
-p 8080:8080 \
-v sensu-backend-data:/var/lib/sensu \
sensu:latest sensu-backend startSensu Go Agentの起動
docker run -it --rm \
--network sensu-net \
-p 3030:3030 \
sensu:latest sensu-agent start \
--backend-url ws://sensu-backend:8081 \
--deregister \
--keepalive-interval=5 \
--keepalive-warning-timeout=10 \
--subscriptions linuxSensu Go Webの起動
docker run -it --rm \
--network sensu-net \
-e PORT=3000 \
-e API_URL=http://sensu-backend:8080 \
-p 3000:3000 \
sensu-go-web:latest
Sensuctl CLIの設定
ディレクトリの作成
mkdir sensuctl
cd sensuctl何度も実行するのでエイリアス登録
alias sensuctl="docker run -it --rm \
--network sensu-net \
-v $PWD/.config/sensu/sensuctl:/root/.config/sensu/sensuctl \
-v $PWD:/work \
-w /work \
sensu:latest sensuctl"sensuctlの初期設定 初期設定をしておくことで、
sensuctl
実行時に毎回認証情報やAPIのURLを指定せずにすみます。sensuctl configure
ウィザードに答える
? Sensu Backend API URL: http://sensu-backend:8080
? Username: admin
? Password: admin
? Namespace: default
? Preferred output format: tabularsensuctl/.config/sensu/sensuctl
にcluster
とprofile
が生成されます。
Sensu Go Web
を使ってみる
http://[IPアドレス]:3000/
にアクセスします。
ログインするとEvents一覧画面
へ遷移します。
- Events一覧画面
- Event詳細画面
- Entities一覧画面
- Entity詳細画面
- Silences一覧画面
Silenceの詳細画面はありません。
- Configuration
Checks、Filters、handlers、Mutatorsの設定が閲覧できます。設定を追加することはできなさそうです。
OSS版のWeb UIは最低限の機能という印象です。
Sensuctl CLI
を使ってみる
Sensu Go Webで確認できた内容はCLIで取得することも可能です。
- event list
eventがリストアップされます。
sensuctl event list
Entity Check Output Status Silenced Timestamp UUID
─────────────── ─────────── ──────────────────────────────────────────────────────────────────────── ──────── ────────── ─────────────────────────────── ───────────────────────────────────────
8955f57fbd0a keepalive Keepalive last sent from 8955f57fbd0a at 2022-09-03 13:51:32 +0000 UTC 0 false 2022-09-03 13:51:32 +0000 UTC 27a5aad5-e973-4e9b-9965-8f7ec7e799b3
- entity list
entityがリストアップされます。
sensuctl entity list
ID Class OS Subscriptions Last Seen
─────────────── ─────── ─────── ─────────────────────────── ────────────────────────────────
8955f57fbd0a agent linux linux,entity:8955f57fbd0a 2022-09-03 13:46:52 +0000 UTC
OSS版のWeb UIでできたことはCLIでもできそうです。
- asset add
CLIでは閲覧だけでなく、設定の追加も可能です。asset
を追加します。
assetはBonsaiというHubに登録されているものから追加できます。
sensu/system-checkの詳細はこちら。
sensuctl asset add sensu/system-check
no version specified, using latest: 0.1.2
fetching bonsai asset: sensu/system-check:0.1.2
added asset: sensu/system-check:0.1.2
You have successfully added the Sensu asset resource, but the asset will not get downloaded until
it's invoked by another Sensu resource (ex. check). To add this runtime asset to the appropriate
resource, populate the "runtime_assets" field with ["sensu/system-check"].
- check create
続いてcheckを作成します。
sensuctl check create system-check-metrics \
--command 'system-check' \
--interval 15 \
--subscriptions linux \
--runtime-assets sensu/system-check \
--output-metric-format nagios_perfdata
Created
作成したcheckの情報は以下で取得が可能です。
sensuctl check info system-check-metrics
=== system-check-metrics
Name: system-check-metrics
Interval: 15
Command: system-check
Cron:
Timeout: 0
TTL: 0
Subscriptions: linux
Handlers:
Runtime Assets: sensu/system-check
Hooks:
Publish?: true
Stdin?: false
Proxy Entity Name:
Namespace: default
Metric Format: nagios_perfdata
Metric Handlers:
--format
を指定するとYAMLやJSON形式で出力が可能です。
YAMLやJSON形式のファイルを保存しておくと、ファイルをインプットとしてcheckを作成することもできます。
- ファイルに出力
sensuctl check info system-check-metrics --format yaml > check_system-check-metrics.yaml
- 一旦削除
sensuctl check delete system-check-metrics
- ファイルから作成
sensuctl create -f check_system-check-metrics.yaml
作成したcheck
はSensu Go Webで閲覧が可能です。
CLIでは設定の追加・変更も可能です。
以上、Sensu Go単体での基本的な使い方です。
収集したデータの永続化はInfluxDB
を使うのが一般的のようです。