Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
運用視点でのPrometheusのNW機器のモニタリング #npstudy
Search
t-tkgh
January 29, 2020
Technology
5.3k
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
210
Other Decks in Technology
See All in Technology
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
3
510
What the customer really needed
kawaguti
PRO
2
180
Genieを崇めよ
kameitomohiro
0
130
20260912_スクフェス三河
kgnkhkr
0
380
「守り」で活用するオンデバイスLLM 〜写ってはいけないを総力戦で防ぐ〜 / iOSDC Japan 2026
nakamuuu
0
160
事業課題から技術的負債に向き合う
sansantech
PRO
2
1.8k
アクセスキーこわい やめかたと漏らさない工夫
sassssan68
1
250
AI時代の「技術的負債」の変質ー概念の終焉と再解釈、エージェントと共に向かう先
nwiizo
0
2.6k
アプリをもっと"iOSアプリっぽく"する小さな工夫 / Small Touches That Make Your App Feel More Like an iOS App
matsuji
1
900
Omarchy Quattro の日本語設定周り
simosako
2
180
俺の仕事は AIに奪われないし、たぶんその BIも要らない
hikaruri
0
480
すぐできる衛星通信対応 あとは山奥に行くだけ
tatetate55
0
130
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
432
67k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
The Language of Interfaces
destraynor
162
27k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
65k
Practical Orchestrator
shlominoach
192
12k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
Making Projects Easy
brettharned
120
6.8k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.8k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
1
520
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
Building AI with AI
inesmontani
PRO
1
1.2k
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. ご清聴ありがとうございました