kubernetes上でprometheusとgrafanaとsnmp-exporterを動かす

スポンサーリンク

はじめに

前回prometheusとgrafanaをkubernetes上で動かしました。

前回はprometheusとgrafanaを動かすことを目的としていましたが、今回は新たにsnmp-exporterを使ってみたいと思います。exporterとはprometheusでデータを取得するために必要なものです。

なんでsnmp-exporter?

snmp-exporterは名前の通りsnmpポーリングを使用します。

なんで数あるexporterからsnmp-exporterを選んだか?それは取っ付きやすいからです!w

NWエンジニアである私はsnmpに多少なじみがあり、k8sやprometheusという荒野に突撃した私にとってsnmpはオアシスです。

今回はpromethuesのstatic_configを使ってやるパターンです。

参考サイト

snmp-exporterの設定はこちらのサイト様を参考にさせていただきました。

prometheusのconfigは公式をもとに作成しました。

内部DNSを使ってドメインを指定することで解決しています。この部分はこちらを参考にさせていただきました。

公式だとこの辺。

ちなみに今回の参考サイトではないですが前回同様kkohtaka様のコードをもとにしてます。

使用した環境について

各versionはこちら

Ubuntu 16.04.4 LTS

docker:17.03.2-ce

kubectl:v1.10.1

prometheus:v2.2.1

snmp-exporter:v0.11.0

grafana:5.1.3

k8sの環境は前回と同じです。

SNMPのポーリング宛先としてRaspberry Pi3を使っています。192.168.0.31というアドレスです。

ciscoもyamahaもうちにはないのでorz

type: raspiのraspiはラズパイのことです。

ちなみにラズパイ側でのsnmp設定はdockerで作ってみました。

自分で何回か見返すこともあるので別の投稿で残しておきます。

各種ファイルについて

grafanaは前回と同様です。

prometheusに一部変更とsnmp-exporter.ymlを追加してます。

prometheus.yml

●kind: ConfigMap
前回と違う箇所だけ抜き出しました。
最後のreplacementはk8sでsnmp-exporterのpodをIPアドレス指定にするわけにはいかないので内部DNSを使ってドメインを指定することで解決しています。

・snmp-exporter-clusterip.monitoring.svc.cluster.local:9116について

snmp-exporter-clusteripはこのあと出てくるsnmp-add.ymlのService名です。

monitoringはnamespaceの名前です。svcは固定でcluster.localだそうです。

これでsnmp-exporterがどのnodeにいるかを気にしなくて済みます。

snmp-exporter.yml

●kind: Serviceについて
prometheus.ymlと同じような感じですが内部だけでアクセスできればいいのでtypeをClusterIPにしています。

●kind: Deploymentについて
prometheusのときと同じような感じです。
podの/etc/snmp_exporterにsnmp.ymlを渡したいのでvolumeを使ってます。

●kind: ConfigMapについて
snmp.ymlを作っています。先ほどふれたsnmp.ymlがこれです。
作成は以前の投稿で書いたgeneratorを使用しています。

grafana.yml

前回と全く同じですので前回を参考にお願いします。

前回の設定削除

一応前回の設定は以下コマンドで消しています。

kubectl delete -f prometheus.yml

kubectl delete -f grafana.yml

grafanaはそのままでも問題ないと思いますが、prometheusはもしかしたらpodが再作成されないかもしれないので消しておいたほうが確実です。

k8sへ適応(デプロイ)

設定時のログはこちらです。前回と同じようにkubectl apply -f XXXX.ymlでデプロイしています。

具体的には以下コマンドです。

kubectl apply -f prometheus.yml

kubectl apply -f snmp-exporter.yml

kubectl apply -f grafana.yml

prometheus.ymlにmonitoringのNamespaceを作る箇所があるのでこれを初めにいれます。

kubectl get pod --all-namespacesでgrafana、prometheus、snmp-exporterがRunning担っているのが確認できます。

動作確認

prometheusにアクセスし、targetsを確認します。

http://192.168.0.14:30090/targets

うまく動作しているとこちらのような画面になります。

192.168.0.31はラズパイです。snmpの設定もされているので当然UPしています。

192.168.0.100は比較用のダミーです。そもそも機器が存在しないためDOWNしてます(cisco機ほしい)

確認のため適当にグラフを作成してみます。今回はsnmp-exporter.ymlで作っているsnmp.ymlなかのraspi箇所で定義しているifInOctetsを見ています。

ちゃんとifInOctetsが見えてますね!

snmp-exporterがラズパイ3からifInOctetsを取得してくれています。

※grafanaは前回と代り映えないので割愛します。

Githubについて

こちらにまとめておいてます。

最後に

ということでsnmp-exporterの設定例でした。

あんまりprometheusでsnmp使う人少ないんですかね?事例が少なかったので書いてみました。

個人的にgrafanaのおかげもありますがcactiやzabbixよりも設定箇所が少なくて取っ付き易いと思うのでおすすめです。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする