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
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
More Decks by t-tkgh
See All by t-tkgh
janog58_NetBox活用BoF
ttkgh
0
160
Other Decks in Technology
See All in Technology
誤解だらけの開発生産性 / Myths and Misconceptions about Developer Productivity
i35_267
2
820
10年目を迎えた「ABEMA」がどのように AI 活用を推進して、AI 駆動開発にシフトしているのか / How ABEMA, entering its 10th year, is promoting the use of AI and shifting toward AI-driven development
miyukki
0
290
Control Planeで育てるBtoB SaaSの認証基盤 - SRE NEXT 2026
pokohide
1
2.7k
AIコード生成×サプライチェーン攻撃 — PHPが直面する“二重の信頼問題
shinyasaita
0
230
Amplify Gen2でbackend.tsにCDKを定義する/しない事によるCDKの挙動の違いとユースケース
smt7174
1
430
Genie Ontologyは銀の弾丸かを考える / Is Genie Ontology a Silver Bullet?
nttcom
0
410
AIが実装を自走する時代の認知負債との戦い
lycorptech_jp
PRO
1
450
副作用のある Lambda でも Lambda Power Tuning は使えるのか / lambda-power-tuning-side-effects
koukihosaka
1
120
kaonavi Tech Night#1
kaonavi
0
110
CSに"SLO"は要らない、経営層に"99.9%"は伝わらない - SREを全社に"翻訳"する3原則
cscengineer
PRO
1
5.2k
あなたの『Site』はどこですか? — xREという考え方
miyamu
0
1.2k
【Claude Code】鹿野さんに聞く 私の推しの並行開発環境 大公開 / claude-code-parallel-2026-07-15
tonkotsuboy_com
12
8.7k
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
432
67k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
360
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
390
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.1k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
260
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
190
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
450
Product Roadmaps are Hard
iamctodd
55
12k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
45k
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. ご清聴ありがとうございました