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
Other Decks in Technology
See All in Technology
[AWS Summit Japan 2026]迷っているあなたへ_小さな一歩が、やがて自分を助けてくれる
sh_fk2
2
410
週末にループ・エンジニアリングの理解を深めるためのスライド
nagatsu
0
230
起点・思考・出力で分解する 〜PM業務の自動化設計〜
kazu_kichi_67
1
1.1k
【Snowflake Summit 2026 Recap!!】Snowflake Summit Deep Dive: Security & Governance
civitaspo
1
310
2026年6月23日 Syncable Tech + Start Python Club にて
hamukazu
0
150
サイバーエージェントにおけるAI推進戦略と変革への取り組み
shotatsuge
0
540
BPaaSで進むAIオペレーションの現在地 AI実装が効く領域とスケーラビリティの選定と実装
kentarofujii
0
190
GitHub Copilot 最新アップデート – 「一歩先」の実践活用術
moulongzhang
5
1.7k
元・セキュリティ学習経験0大学生による業務紹介 / An Introduction to the Job by a Former College Student with Zero Security Training Experience
nttcom
0
150
Deep Data Security 機能解説
oracle4engineer
PRO
2
120
AIが自律的に回る開発ループを設計してチーム開発に組み込む
nekorush14
0
130
作る力から、見極める力へ — AI時代に広がるエンジニアの価値と役割
rince
0
330
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
420
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Color Theory Basics | Prateek | Gurzu
gurzu
0
370
How GitHub (no longer) Works
holman
316
150k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Writing Fast Ruby
sferik
630
63k
Chasing Engaging Ingredients in Design
codingconduct
0
230
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
450
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Google's AI Overviews - The New Search
badams
0
1k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
340
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. ご清聴ありがとうございました