この記事を書いてから四半期が過ぎ、いろいろと動かすアプリが増えてきて、いい加減にやらないと、と思い、どんな監視方法があるのかを調べてみた。すると有料のものを除けばGrafana + Prometheusが一般的な印象だった。
まずはZabbixで挑戦
でも過去の経験とか、既に監視で使っているとかの理由で、Zabbixにしてみた。
たまたまZabbix on Kubernetesというリポジトリでマニュフェストファイルがあったので簡単に構築できそうだったし。
でも、、、
- zabbix-all-in-one-bare-metal.yamlで使われるZabbixコンテナイメージのmonitoringartist/zabbix-xxlは2年前で更新が止まってる。
- 同じグループに、Dockerに特化した?monitoringartist/dockbix-xxlというのがあり、今年4月にも更新されていた。
- そこでmonitoringartist/dockbix-xxlに書き換えてデプロイ。Zabbixは正常に起動した。
- しかし、直ぐにZabbix ServerのSwapが足りないとの警告がでる。kubernetes構築時はSwapをOffにするから?ちょっと不安に。
- dockbix-agent-xxl-daemonset.yamlでエージェントを配置。けどエージェントがZabbixに接続できないとエラーが出続ける。。。
のように自分の力不足で参入障壁を超えられずに断念しました。
やはりGrafana + Prometheusで監視
なので定番の方法にしました。アプリのフレームワークとして使用しているSpring Bootが提供する監視インターフェスのMicrometerとも相性が良いし。(MicrometerがZabbixをサポートしてないのは驚いた。)
こちらの記事を参考にさせて頂き、Kubernetes Setup for Prometheus and Grafanaでデプロイ。
kubectl apply -f https://raw.githubusercontent.com/giantswarm/prometheus/master/manifests-all.yaml
すんなりと起動して、Ingressの設定も加えてGrafanaの画面を見て、何も設定せずに各podのリソース使用状況が表示され、その簡単さにちょっと感動しました。
もちろん、どんな情報が表示されてて、何か足りない情報がないかとか、検証しないといけないことの多さを考えると、ちょっとクラクラしますが。。。
トラブル: kubeletインスタンスの監視ができない
Prometheusの[Alerts]画面を見るとInstanceDownの警告がでてた。
意味が判らず他の画面を見てたら[Status]-[Targets]画面の、kubernetes-nodesにある全エンドポイントがDOWN状態だった。エラーを見ると、各ノードの10255ポートに接続できないとのこと。
10255ポートはkubeletが認証なしで接続できるポートだったけど、セキュリティの関係で、Kubernetes 1.11以降のkubeadmで構築すると無効(参照)になってた。
セキュアな10250ポートにアクセスする方法を模索したけど、いまいち設定方法が判らず、、、
Prometheusの監視定義?kubernetes_sd_configsでは元々10250ポートにアクセスするのを、manifests-all.yamlでは10255ポートに変更していたので、これを解除してみたけど駄目だった。。。
これは今後の課題ということにして、暫定的にnode-exporterにアクセスすることで警告を回避。
- job_name: 'kubernetes-nodes'
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
kubernetes_sd_configs:
- role: node
relabel_configs:
- source_labels: [__address__]
regex: '(.*):10250'
replacement: '${1}:9100'
target_label: __address__
でもdaemonsetはmasterノードで動かないよね。masterノードの監視はどうするのが正しいのか調べたけど、それらしきものが見つからず、手動でnode_exporterを動かすことにした。
幸いにもRHEL/CentOS/Fedoraならリポジトリが用意されてた。
# curl -Lo /etc/yum.repos.d/_copr_ibotty-prometheus-exporters.repo https://copr.fedorainfracloud.org/coprs/ibotty/prometheus-exporters/repo/epel-7/ibotty-prometheus-exporters-epel-7.repo
# yum install -y node_exporter
# systemctl start node_exporter
# systemctl enable node_exporter
これでmasterノードのDOWN警告も回避しつつ、メトリクスも収集できる筈。