Minioのメトリックスに情報を出してみる

投稿者: | 7月 14, 2022

Minioは、Qnap/SynologyのDockerでも、WindowsやLinuxで動作するのでとても便利(何度も言うが、Minioの関係者でありません。)。

Minio自体は、バイナリの引数にディレクトリをつけて実行するだけなので、特別な設定はほとんどいらない。何か特別な設定をつけている人はいないのではと思う。

仕事の都合上、Minioをhttpsでアクセスさせ、バケットのロックを有効にして使っている。(確かこれも以前、このブログに書いた気がする。)今回は、その次ということでMinio Consoleのダッシュボードに表示されるMetricを表示させる方法を記載する。キャプチャーによく載っているのだが、実際は、Minioを単純に起動するだけでは表示されない。大抵は以下のような表示になっているはずである。

以下はMacで起動させてみた例。

UntitledImage

はっきり言って容量ぐらいしかわからない。

こっちは、kopiaのバックアップデータを保存させているQNAPで動かしているMinio

UntitledImage

APIの情報やデータサイズ、トラフィックやリソースの利用状況が事細かに表示されている。この表示を出す手っ取り早い方法は、Kubernetes上でkrewで実行すればいいのだが(これも前に書いた。)、minioごときでkubernetesを作るのが面倒。k3sで作るてもあるが、もう少しポータルでコンパクトにしたい。いろいろ調べてもこの表示を出す方法がすっきり書かれているものがない。調べてみた。

察しがつく方(ドキュメントをちゃんと読んだ方)は、気が付くと思うが、Minioで詳細な情報を出力させるためには、Prometheusが必要となる。

情報が少ない理由は、Prometheusの立ち上げ方(既存にあるものを併用も含む)がいろいろあるので、これっという例を例示しにくい。言うならばご自由にどうぞということなんだろう。

Linux Systemdや、Windowsでこのダッシュボードを作ってみたが、結構複雑(自動構築スクリプトは作ったが。。。)だった。そこで白羽の矢が立ったのがDockerで作ることであった。MinioとPrometheusなので、Docker-Composeで作ることにした。QnapもSynologyもDocker-Composeが使えるので、作ってみたところかなり便利だった。もちろん、WindowsにDockerを入れれば動かすことができる。だんだんネイティブバイナリは流行らなくなるのではと思ってきた。

 

閑話休題

で、今回そのdocker-compose.ymlを公開したいと思う。ただし、QNAP上のhttpsの環境なので、証明書の類は指定のフォルダーに置いておく必要がある。(というわけで必ず書き換える必要がある。やはりコピペでどーんとはいかない。)

 # cat docker-compose.yml
version: "3.7"
services:
prometheus:
image: prom/prometheus
restart: always
command: --config.file=/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
volumes:
- /share/Share/minio/prometheus.yml:/etc/prometheus/prometheus.yml
minio:
image: minio/minio
environment:
- MINIO_ROOT_USER=miniouser
- MINIO_ROOT_PASSWORD=miniouser123456
- MINIO_PROMETHEUS_AUTH_TYPE=public
- MINIO_PROMETHEUS_URL=http://192.168.1.100:9090
- MINIO_SERVER_URL=https://minio.example.corp:9000
restart: always
healthcheck:
test: ["CMD", "curl", "-k", "-f", "https://192.168.1.100:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
command: server /data{1...4} --console-address ":9001"
ports:
- "9000:9000"
- "9001:9001"
volumes:
- /share/Share/minio/data1:/data1
- /share/Share/minio/data2:/data2
- /share/Share/minio/data3:/data3
- /share/Share/minio/data4:/data4
- /share/Share/minio/config:/root/.minio

すごい長いファイルかと思いきやシンプルにできた。

解説をすると

minioのベースディレクトリは、/share/Share/minio/ とした。この下に証明書のファイルやらディレクトリ(Lockを使いたいので複数)を作成している。

httpsなので、MINIO_SERVER_URL=https://minio.example.corp:9000 が必要。これがないとログインができない。

https://192.168.1.100:9000/minio/health/live は、dockerのヘルスチェックで正しく表示されないのも気持ちわるいので設定した。

/share/Share/minio/prometheus.ymlにPrometheusの設定ファイルを置いた。(ファイルの内容は後述)

MINIO_PROMETHEUS_AUTH_TYPE=publicとMINIO_PROMETHEUS_URL=http://192.168.10.4:9090を記載することで、Metricの詳細情報が表示されるようになる。Prometheus URLは、Dockerのネットワークアドレス空間でもよかったかもしれない。ただ、外に露出することで他(Grafanaとか)で使えるからこのままでいいかなということで放置してある。

prometheus.ymlは以下

# cat prometheus.yml
scrape_configs:
- job_name: minio-job
metrics_path: /minio/v2/metrics/cluster
scheme: https
static_configs:
- targets: ['minio:9000']
tls_config:
insecure_skip_verify: true

実際のファイル展開は以下のようになる。

ls /share/Share/minio/
config/ data1/ data2/ data3/ data4/ docker-compose.yml prometheus.yml

証明書は以下に入れておく。自分はLets encryptのDNS証明書を使っている。

ls /share/Share/minio/config/certs/
CAs/ private.key public.crt

/share/Share/minio/ でdocker-composeを実行すればいい。

 

というわけで、Minioの詳細情報を表示させる方法記載した。AWS S3だとCloudWatchでお金を払わないと取れない情報もMinioだと簡単に取れる。ただ、インスタンスの性能がもろに響くので、QNAPとかで立ててもそんなにパフォーマンスはでない。

それにしても、近頃コピペしてうまく動くものがとても少なくなってきているような気がする。あと基本的な知識(その基本が年々上昇)の記載を省いて書かれているものが実は多いなと思う今日この頃。インフラおじさんも100日で死ぬワニみたいなものかもしれない。死にたくないw

 

 

 

 

コメントを残す