Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
運用視点でのPrometheusのNW機器のモニタリング #npstudy
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
t-tkgh
January 29, 2020
Technology
5.2k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
運用視点でのPrometheusのNW機器のモニタリング #npstudy
t-tkgh
January 29, 2020
Other Decks in Technology
See All in Technology
千葉での単身赴任からAWSをやり続け、千葉に戻ってきた話
yama3133
1
120
10年間のブログ発信を振り返って見えたWebアプリケーションエンジニアとしての軌跡
stefafafan
0
190
いまさら聞けない「仕様駆動開発入門」 〜AI活用時代の開発プロセスを考える〜
findy_eventslides
2
200
SteampipeとExcel Power QueryでAWS構成定義書の作成を自動化する
jhashimoto
0
180
新しいUbuntu/GNOMEが使いたいからXからWaylandへ移行頑張ってるの巻 2026-06-20
nobutomurata
0
160
LayerX コーポレートエンジニアリング室におけるサプライチェーンセキュリティへの取り組み / Supply Chain Security at LayerX Corporate Engineering
yuyatakeyama
3
840
Comment regagner la souveraineté de vos données tout en étant payé grâce à Nostr !
rlifchitz
0
200
スタートアップにAmazon EKSは早すぎる? マルチプロダクト戦略を加速する Platform Engineeringの実践 / Is Amazon EKS Too Soon for Startups? Practical Platform Engineering to Accelerate a Multi-Product Strategy
elmodev09
1
1.8k
気軽に使える"情報のハブ"としてのNotion活用 〜フロー情報の集積点 と、 Claude Code × Notion AI〜
syucream
1
200
AIをフル活用してオンコール機能のプロトタイプを2日で作った話 / Building an AI-Powered On-Call Prototype in Just Two Days
nari_ex
0
130
Multi-Agent並列開発を 安全に回すための技術 / Technology for Safely Multi-Agent Parallel Development
tooppoo
0
180
2026 AI Memory Architecture
nagatsu
0
250
Featured
See All Featured
Faster Mobile Websites
deanohume
310
32k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
Embracing the Ebb and Flow
colly
88
5.1k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
620
Un-Boring Meetings
codingconduct
0
320
Statistics for Hackers
jakevdp
799
230k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
440
It's Worth the Effort
3n
188
29k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
210
Java REST API Framework Comparison - PWX 2021
mraible
34
9.4k
Transcript
運用視点での PrometheusのNW機器のモニタリング ネットワークプログラマビリティ勉強会 #19 2020/01/29 ビッグローブ株式会社 基盤本部 ネットワーク技術部 自動化推進グループ 滝口
敏行
2 BIGLOBE Inc. 初めに 最新のOSS監視システムであるPrometheusを利用すると 従来の監視システムにおいてNW運用観点で課題だったところが解決できることがわかりました。 PrometheusのSNMPを使ったネットワーク機器の監視ノウハウや事例が少ないので、 今回はPrometheusのSNMP監視のノウハウをご紹介したいと思います。
SNMP
3 BIGLOBE Inc. 自己紹介 滝口 敏行 業務:ネットワークインフラ周りの運用自動化の実装を進めるチームに所属。 経歴:現在3社目です。
年齢:最後の昭和生まれです。 細かいこと: 趣味はドラムです。ヘビィメタルバンドのコピーやってます。 新婚です。(Janog 44の前日に入籍しました) 昨年夏のJanog44のハッカソンにて優勝しました。 ⇒成果物の本番活用は現在着手中なので、 また機会がありましたらお話しいたします。
4 BIGLOBE Inc. 従来のモニタリングシステムの課題 従来のモニタリングシステムはSNMPのifIndexやifNameなどでInterfaceごとにユニークに管理している。 回線増速や移設などによるInterfaceやラインカード交換により監視対象トラフィックのifIndexやifNameに変更が発生する。 監視システムの都度メンテナンスをしないと対象トラフィックを継続的に監視することは難しい。
規模が大きくなると工数がかかるので自動化したい。 回線のActive/Standby・接続先のキャリア単位・拠点単位でのグルーピングされたトラフィックデータが見たい。 1Gbps 10Gbps 450 500 550 600 650 9:00 9:10 9:20 9:30 9:40 9:50 10:00 10:10 10:20 10:30 10:40 10:50 11:00 1G_eth0[Mbps] 閾値[600Mbps] 増速 Active Standby ifIndex: 10 ifName: 1G_eth0 ・・・ ifIndex: 110 ifName: 10G_eth0 1Gbps 1Gbps 0 200 400 600 9:00 9:20 9:40 10:00 10:20 10:40 11:00 Active[Mbps] 0 200 400 600 800 9:00 9:20 9:40 10:00 10:20 10:40 11:00 Standby[Mbps] 0 200 400 600 800 9:00 9:10 9:20 9:30 9:40 9:50 10:00 10:10 10:20 10:30 10:40 10:50 11:00 Active[Mbps] Standby[Mbps] 自動集計
5 BIGLOBE Inc. 各回線の識別キーワードから動的に集計するのはどうか? ifIndexやifNameなどの自ホスト・自インターフェイスを起点としたモニタリングだと構成変更・抽象度を上げた集計に弱い 通信先・拠点・役割などのキーワードベースなら変更と集計に強くなるのではないか? ホスト名やInterface
Descriptionには、何かしら拠点や通信先・役割を識別するキーワードが埋め込まれているはず。 これらをキーワードを組み合わせて自動で集計してモニタリングできる仕組みは作れないか?
6 BIGLOBE Inc. 拠点B 特徴 時系列データベース(TSDB)のデータクエリ(PromQL)が強力。 PrometheusサーバとNW機器を直接通信させる必要はない。
SNMP-ExporterがNW機器からSNMP情報を収集する役割を担当。 SNMP-ExporterとPrometheusはHTTP APIで通信するため、疎結合に配置できる。 監視ダッシュボードはカスタマイズ性の高いOSSのGrafanaで実装。 Grafana上でPromQLが定義できるので、高度な集計を行うクエリでのグラフ生成ができる ざっくりとしたアーキテクチャイメージ 拠点A メイン拠点 救世主のPrometheusについて Prometheus TSDB (時系列DB) Grafana AlertManager Scrape HTTP Server Mail, Slack 等へ通知 SNMP- Exporter HTTP Server SNMP Walk / Get SNMP- Exporter HTTP Server SNMP Walk / Get Operator
7 BIGLOBE Inc. 詳しいPrometheusの解説は割愛します… Prometheus自体を詳しく知りたい方は 以下のPrometheusの書籍をお勧めします。 「PrometheusでKubernetesを監視する本」 https://booth.pm/ja/items/1570360 •
電子版:¥ 800 • 書籍版:¥ 1,000 著者 : かめねこさん @kameneko1004 Kubernetesを監視することをテーマとされておりますが、 Prometheus全般の解説がスマートにまとまっており、 ハンズオン的にPrometheusを構築できるので Prometheusをまず触ってみたいという方にはお勧めの一冊です。 ここで紹介することを快諾していただいた かめねこさん、ご協力いただきありがとうございました! ⇒PromQLやGrafana、Alert Manager、各種Exporterなどを さらに深堀されたい場合は、 O’ REILLYの「入門 Prometheus」をお勧めします。 https://www.oreilly.co.jp/books/9784873118772/
8 BIGLOBE Inc. デモ実演 デモイメージ抜粋 Interface Descriptionで 「CarrierA」に部分一 致するIFを指定
DescPhraseの条件に合致した IFを持つ機器で、ホスト名に 「tokyo」がある機器を指定 ※候補が自動でプルダウンメ ニューに出てくる HostnameとInterfaceで条件にあ う候補が選択できるので、 選択したもののデータが描写される
9 BIGLOBE Inc. 作り方を説明します (時間の許す限り・・・) ~デモ環境~ Prometheus: v2.15.2 Grafana: v6.5.2
10 BIGLOBE Inc. 作り方①(snmp_exporter構築) Githubリポジトリ https://github.com/prometheus/snmp_exporter 構築手順① 始めにどのMIB,OIDを取得するか指定する定義ファイルsnmp.yml
を作成するが、これを手で作るのは大変。 snmp-generatorというツールを使ってsnmp.ymlを生成する。 ※「[参考] snmp-generatorのDockerインスタンス作成手順」ページ参照 構築手順② 生成されたsnmp.ymlを指定してDockerインスタンスを起動させる ※「[参考] snmp_exporterのDockerインスタンス作成手順」ページ参照 構築手順③ 試しにsnmp.ymlに定義した監視対象から情報取得できるか確認する。 - http://<snmp_exporterを起動しているDockerホストのアドレス>:9116 へアクセスし、 Targetに監視対象機器のホスト名、ModuleにDEMOを入力して、 Submitボタンを押下すると、 しばらくしてSNMPの収集情報が表示される。
11 BIGLOBE Inc. $ sudo apt-get install make $ git
clone -b v0.16.1 https://github.com/prometheus/snmp_exporter.git $ cd snmp_exporter/ $ wget https://github.com/prometheus/snmp_exporter/releases/do wnload/v0.16.1/snmp_exporter-0.16.1.linux-amd64.tar.gz $ tar -xvzf snmp_exporter-0.16.1 .linux-amd64.tar.gz $ cp snmp_exporter-0.16.1.linux-amd64/snmp_exporter ./ $ cd generator/ $ vi generator.yml ※⇒のサンプルgenerator.ymlの内容に上書きする $ make mibs ※エラーが出る場合はMakefileの対象URLを修正する $ sudo docker build -t snmp-generator . $ sudo docker run -ti -v "${PWD}:/opt" -v "${PWD}/mibs:/root/.snmp/mibs" snmp-generator generate [参考] snmp-generatorのDockerインスタンス作成手順(ホストOS: Ubuntu 18.04LTS) 手順 ※バージョン0.16.1を基準にしているので、適宜変えてください。 modules: DEMO: walk: - sysDescr - sysName - sysUpTime - ifDescr - ifAlias - ifHighSpeed - ifType - ifMtu - ifIndex - ifOperStatus - ifAdminStatus - ifHCInOctets - ifHCOutOctets - ifInErrors - ifOutErrors - ifInDiscards - ifOutDiscards lookups: - source_indexes: [ifIndex] lookup: ifDescr drop_source_indexes: false - source_indexes: [ifIndex] lookup: ifAlias drop_source_indexes: false - source_indexes: [ifIndex] lookup: ifName drop_source_indexes: false overrides: ifType: type: EnumAsInfo auth: community: public サンプルgenerator.yml ※適宜MIBやOID, Community値を追加・編集してください
12 BIGLOBE Inc. $ cd {git cloneしたディレクトリ}/snmp_exporter/ $ cp generator/snmp.yml
./ $ vi snmp.yml ※必要に応じて⇒のサンプルsnmy.ymlの内容をもとに編集する $ sudo docker build -t snmp-exporter . $ sudo docker run --detach --name snmp-exporter -- restart always -v “${PWD}/snmp.yml:/etc/snmp_exporter/snmp.yml” -v /etc/hosts:/etc/hosts:ro -p 9116:9116 snmp-exporter ※監視対象機器の名前解決をDockerホスト側でできるようにしておく。 監視対象機器の名前解決できるDNSサーバがいる場合は 赤字部分を「--dns=X.X.X.X(DNSサーバのアドレス)」とする [参考] snmp_exporterのDockerインスタンス作成手順(ホストOS: Ubuntu 18.04LTS) 手順 ※ [参考] snmp-generatorのDockerインスタンス作成手順を実施済みとする。 # WARNING: This file was auto-generated using snmp_exporter generator, manual changes will be lost. DEMO: &DEMO walk: <<中略>> - labels: - ifIndex labelname: ifName oid: 1.3.6.1.2.1.31.1.1.1.1 type: DisplayString auth: community: public TOKYO: ←Community値が同じモジュール名を作る <<: *DEMO auth: community: XXXXXXX ← SNMPコミュニティ値を指定 サンプルsnmp.yml ※SNMP Community値が違う機器が複数存在する場合は赤字部分を追記していく。
13 BIGLOBE Inc. 作り方②(Prometheusサーバへ登録) 構築手順① Prometheusサーバへ監視対象を登録するため、 prometheus.ymlを編集する。 ※⇒のprometheus.ymlのscrape_config階層配下に赤字部分を追記
構築手順② Prometheusのプロセスを再起動して設定を反映する。 構築手順③ 監視ターゲット一覧画面を開いて、 対象の機器のモニタリングが開始すること確認する。 URL:「http(s)://<Prometheusサーバのアドレス>/targets」 ※数分してStateが「UNKNOWN」から「UP」に変わる。 scrape_configs: <<中略>> - job_name: DEMO ←snmp.ymlで定義したモジュール名DEMOを指定する scrape_interval: 1m ←ここで監視間隔を個別に指定できる。例:5分であれば5mと指定。 static_configs: - targets: - DEMO_Router01_osaka ←DEMOに紐づく監視対象のホスト名を記載する。 metrics_path: /snmp params: module: [DEMO] ← snmp.ymlで定義したモジュール名DEMOを指定する relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: hostname source_labels: [sysName] - target_label: __address__ replacement: <snmp_exporterを起動しているDockerホストのアドレス>:9116 - job_name: TOKYO ←snmp.ymlで定義したモジュール名TOKYOを指定する scrape_interval: 1m static_configs: - targets: - DEMO_Router01_Tokyo ←TOKYOに紐づく監視対象のホスト名を記載する。 metrics_path: /snmp params: module: [TOKYO] ←snmp.ymlで定義したモジュール名TOKYOを指定する relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: hostname source_labels: [sysName] - target_label: __address__ replacement: <snmp_exporterを起動しているDockerホストのアドレス>:9116 prometheus.yml SNMP Community値 種別(モジュール数)分 ここの記載を追加していく
14 BIGLOBE Inc. 作り方③(GrafanaでダッシュボードVariables設定) 構築手順① ※GrafanaからPrometheusの登録は事前に完了しておく DashBoardの作成画面を開き、「Dashborad Settings」 ->
[Variables]を選択する。 構築手順② 下記一覧表に記載している三つの変数を作成して、「Save Dashboard」をして設定を保存する。 ※[参考]Variables定義画面を参照 Name DescPhrase Hostname Interface Type Text box Query Query Data source - prometheus prometheus Query - ifDescr{ifAlias=~"(.*$DescPhrase.*?) "} ifDescr{ ifAlias=~"(.*$DescPhrase.*? )", instance=~"(.*$Hostname.*?)"} Regex - .*instance="(.*?)".* .*ifName=*"(.*?)".* Multi-Value - Enable Enable 作成するVariables一覧 この設定でキーワード検索部分の機能を実現。 ※Queryで参照する時系列データをPromQLで検索し、Regexで狙ったパラメータのみを抽出している。
15 BIGLOBE Inc. [参考]Variables定義画面
16 BIGLOBE Inc. 作り方④(グラフ作成) InterfaceのInputトラフィックレート InterfaceのOutputトラフィックレート Query Prometheusサーバを選択 ※事前にGrafanaの設定でPrometheusサーバを登録しておく Prometheusサーバを選択
※事前にGrafanaの設定でPrometheusサーバを登録しておく Metrics (PromQL) irate(ifHCInOctets{ifAlias=~".*$DescPhrase.*?", instance=~"$Hostname", ifName=~"$Interface"}[2m]) * 8 irate(ifHCOutOctets{ifAlias=~".*$DescPhrase.*?", instance=~"$Hostname", ifName=~"$Interface"}[2m]) * 8 Visualization Left Y -> Unit -> Data Rate -> bits/sec Left Y -> Unit -> Data Rate -> bits/sec 備考 prometheus.ymlのscrape_intervalの二倍の値を赤字部分に 指定する。 prometheus.ymlのscrape_intervalの二倍の値を赤字部分に 指定する。 PromQLでのトラフィックレート集計はirate関数(従来の監視ツールのトラフィックレートと同等の値を算出)を利用。 Variablesで指定した各キーワードを条件に指定して、合致するデータを描写している 構築手順① DashBoardの作成画面にて、「Add Query」を選択する 構築手順② 下記一覧表に記載している三つの設定を投入して、グラフを作成する。 ※[参考]グラフ作成画面を参照 グラフ定義一覧
17 BIGLOBE Inc. [参考]グラフ作成画面
18 BIGLOBE Inc. さいごに Prometheusを使うと、 従来のSNMP監視においてもインテリジェントなモニタリング・集計ができることを紹介しました。 しかし、公開されているPrometheusにおけるノウハウはサーバサイドの方が圧倒的に多く、 NW機器向けのノウハウは少ないのが現状です。
今回の発表でPrometheusでNW機器を監視される人が増えて、 より活発にノウハウ共有をしあうようになれれば幸いです。 よりハッピーになれる運用を目指していきましょう!
19 BIGLOBE Inc. ご清聴ありがとうございました