Homelabが動き出して2週間ほどですがそろそろ監視系のサーバも欲しくなってきました。 でもこれはHomelab。欲しかったら作れます。
構成
監視サーバもswarm内に立ててもいいですが、切り分けもしやすいしまずは単体のゲスト作成でやってみます。
構成はこんな感じでコンテナ環境とpfsenseのリソース監視をやります。
監視ツール
仕事では監視の設定は別部隊がいるので実はがっつりやったことありません。 なのでほぼ1からですから有名なもので作ってみたいと思います。
2、3年前から存在を知ったprometheusを作ってみます。
エージェントレスなのが試しやすくていいですね。
dockerのリソースはcAdvisorで取れることは検証環境で確認済みなので今回はまずpfsenseのリソース取得をします。
デフォルトはsnmpの機能は無くモジュールのsnmp exporterというのを導入すれば取れるみたい。
監視サーバ用OSデプロイ
ovaとってあったubuntuをvirtualboxにimport。
割愛。
prometheusインストール
ダウンロードしたファイル内のバイナリを実行すればとりあえず使えるようです。
masashi@lab-monitor1:~$ wget https://github.com/prometheus/prometheus/releases/download/v2.37.8/prometheus-2.37.8.linux-amd64.tar.gztar xfvz prometheus-2.37.8.linux-amd64.tar.gz masashi@lab-monitor1:~$ cd prometheus-2.37.8.linux-amd64/ masashi@lab-monitor1:~$ ./prometheus
9090ポートで接続。
とりあえず簡単にデプロイ完了。
exporterインストール
こちらはgit clone。
masashi@lab-monitor1:~$ git clone https://github.com/prometheus/snmp_exporter.git masashi@lab-monitor1:~$ cd snmp_exporter/ masashi@lab-monitor1:~/snmp_exporter$ ls CHANGELOG.md config Dockerfile go.mod main.go Makefile.common SECURITY.md testdata CODE_OF_CONDUCT.md config_test.go examples go.sum MAINTAINERS.md NOTICE snmp-mixin VERSION collector CONTRIBUTING.md generator LICENSE Makefile README.md snmp.yml
pfsense用のmibを取り込んで設定ファイルに書く必要があります。
ここでgeneratorの出番。
masashi@lab-monitor1:~/snmp_exporter$ cd generator/ masashi@lab-monitor1:~/snmp_exporter/generator$ ls config.go Dockerfile-local generator generator.yml.org Makefile net_snmp.go snmp.yml tree_test.go Dockerfile FORMAT.md generator.yml main.go mibs README.md tree.go
mibファイルを作ります。
masashi@lab-monitor1:~/snmp_exporter$ make generator mibs
メジャーどこのmibをgenerateしたらpfsenseのmibをコピー。
masashi@lab-monitor1:~/snmp_exporter/generator/mibs$ scp admin@192.168.0.101:/usr/share/snmp/mibs/* .
generator.ymlに取りたい情報を書いて設定ファイルを作ります。
サンプルでこんな感じで追記。
masashi@lab-monitor1:~/snmp_exporter/generator$ tail generator.yml # pfSense pfsense: walk: - ifEntry - pfStatus - pfStateTable - pfInterfaces auth: community: public
OS上ではgeneratorがmake出来なかったのでOS内でdockerコンテナ(standalone)を立ち上げでsnmp.yml書き出し。
masashi@lab-monitor1:~/snmp_exporter$ sudo docker build -t snmp-generator . masashi@lab-monitor1:~/snmp_exporter$ sudo docker run --rm -ti -v "${PWD}:/opt/" snmp-generator generate masashi@lab-monitor1:~/snmp_exporter/generator$ grep -A10 pfsense snmp.yml pfsense: walk: - 1.3.6.1.2.1.2.2.1 - 1.3.6.1.4.1.12325.1.200.1.1 - 1.3.6.1.4.1.12325.1.200.1.3 - 1.3.6.1.4.1.12325.1.200.1.8 metrics: - name: ifIndex oid: 1.3.6.1.2.1.2.2.1.1 type: gauge help: A unique value, greater than zero, for each interface - 1.3.6.1.2.1.2.2.1.1 …
こう言うツール系でもコンテナは役立ちますね。
exporterアクセス
exporterの実行ファイルは別のようで違うリンクから落とします。 これもバイナリを実行するだけ。
masashi@lab-monitor1:~/snmp_exporter-0.21.0.linux-amd64$ wget https://github.com/prometheus/snmp_exporter/releases/download/v0.21.0/snmp_exporter-0.21.0.linux-amd64.tar.gz masashi@lab-monitor1:~/snmp_exporter-0.21.0.linux-amd64$ tar xfvz snmp_exporter-0.21.0.linux-amd64.tar.gz masashi@lab-monitor1:~/snmp_exporter-0.21.0.linux-amd64$ cd snmp_exporter-0.21.0.linux-amd64/ masashi@lab-monitor1:~/snmp_exporter-0.21.0.linux-amd64$ ./snmp_exporter ts=2023-05-21T07:44:25.499Z caller=main.go:148 level=info msg="Starting snmp_exporter" version="(version=0.21.0, branch=HEAD, revision=0d8c3527cac0c26f1d6005b84b74413d14264c37)" ...
9116ポートでアクセス。
pfsenseのmibが取れるようになりました。
exporterのデーモン化
prometheusがexporterにアクセスして情報を取ってくるようです。
systemdで起動できるようにserviceファイルを作成。
masashi@lab-monitor1:~/snmp_exporter-0.21.0.linux-amd64$ cat /etc/systemd/system/sshd.service [Unit] Description=OpenBSD Secure Shell server Documentation=man:sshd(8) man:sshd_config(5) After=network.target auditd.service ConditionPathExists=!/etc/ssh/sshd_not_to_be_run [Service] EnvironmentFile=-/etc/default/ssh ExecStartPre=/usr/sbin/sshd -t ExecStart=/usr/sbin/sshd -D $SSHD_OPTS ExecReload=/usr/sbin/sshd -t ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure RestartPreventExitStatus=255 Type=notify RuntimeDirectory=sshd RuntimeDirectoryMode=0755 [Install] WantedBy=multi-user.target Alias=sshd.service
デーモンとして起動。
読み込むファイル系もコピーしておきます。
masashi@lab-monitor1:~$ sudo cp -R snmp_exporter-0.21.0.linux-amd64 /home/prometheus/snmp_exporter masashi@lab-monitor1:~$ sudo cp /etc/snmp_exporter/snmp.yml /home/prometheus/snmp_exporter/ masashi@lab-monitor1:~$ masashi@lab-monitor1:~$ systemctl status snmp_exporter ○ snmp_exporter.service - SNMP Exporter Loaded: loaded (/etc/systemd/system/snmp_exporter.service; disabled; vendor preset: enabled) Active: inactive (dead) masashi@lab-monitor1:~$ sudo systemctl start snmp_exporter
prometheusの設定
ymlファイルにsnmp exporterの設定を追加して読み込めるようにします。
masashi@lab-monitor1:~/prometheus-2.37.8.linux-amd64$ grep pfsense -A10 prometheus.yml - job_name: "snmp_pfsense" static_configs: - targets: - "10.0.1.254" metrics_path: "/snmp" params: module: [pfsense] scrape_interval: 10s scrape_timeout: 5s relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: 10.0.1.3:9116
prometheus起動
これでsnmp exporter経由でprometheusでsnmpのリソースが取れるようになりました。 再度prometheusを起動して仮のパラメータを入れてみます。
サンプルを打ち込んでみましょう。
OK!取れてます。
あと取得パラメータをチューニングすれば完成です。
追加で色々入れないといけないかもしれませんが、
cpu、memory、interface使用率、セッション数辺りは取りたいですね。
といあえず今回はここまで。
参考サイト
Brendon Matheson - A Step-by-Step Guide to Connecting Prometheus to pfSense via SNMP