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
1,000台のNW機器からログを取得してみた
Search
mahoutukaisali
November 20, 2019
Programming
3.7k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
1,000台のNW機器からログを取得してみた
Ansible NW部
mahoutukaisali
November 20, 2019
Other Decks in Programming
See All in Programming
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
320
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
210
型も通る、synthも通る、それでも危ない 〜AIのCDKの権限とコストを機械で検証する〜 / It Passes Type Checks, It Passes Synth Checks, but It’s Still Risky — Automatically Verifying Permissions and Costs in AI’s CDK —
seike460
PRO
1
550
the container ship “Apple Silicon”@WWDC26 Recap -Japan-\(region).swift
shingangan
0
120
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
4
1.9k
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
480
ITヒヤリハットを整理してみた ~ライフサイクルと原因から考える再発防止策~
koukimiura
1
140
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
220
プロポーザルを書いてもらう
pvcresin
0
510
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
170
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
480
Cloudflare is Agents
chimame
0
160
Featured
See All Featured
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
200
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
380
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.4k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
170
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.8k
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Embracing the Ebb and Flow
colly
88
5.1k
How STYLIGHT went responsive
nonsquared
100
6.2k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
410
Building a Scalable Design System with Sketch
lauravandoore
463
34k
ラッコキーワード サービス紹介資料
rakko
1
4.3M
What's in a price? How to price your products and services
michaelherold
247
13k
Transcript
約1,000台のNW機器から ログを取得してみた
Profile Name 呉 理沙 Career ・2015 富士通に入社 ・2015~2017 営業(通信事業者担当) ・2018~
Network Automation Engineer 趣味 ・ 海外の囲碁大会に参加すること ・ SUITS(海外ドラマ), 新作ポケモンにハマり中。
・背景: ある機器の電源をon/offしたら、設定保存がされてない事が判明! ☞日本全国に設置された約1,000台の機器を調査する事に。 ☞そうだ、Ansibleを使おう。 ・Playbookで実行されるタスク: ☞そもそも疎通できるかどうか確認 ☞差分確認のためのコマンドを実行して出力の有無を確認 作業背景
自動化の障壁 エクセルで管理(セル結合) された機器のインベントリ情報 Ansibleまでの道のりが長い現場がたくさん・・・
本日のテーマ ログイン情報管理表 (人間用) Inventory file Playbook PC用 Ansible実行結果の CSVデータ (PC用)
分析結果出力 (人用) 人間用からPC用へ、PC用から人間用へ 壁1:セル結合されたエクセル 壁2:telnet接続 踏み台経由での接続 壁3:実行結果の分析 + Linux のExpect
退屈な事はPythonにやらせよう! 壁1:セル結合されたインベントリ情報 Inventory File セル結合された インベントリ情報 CSV化 マクロを利用 ※マクロ以外のやり方絶賛募集中!※
Idea 1. NetmikoやPyATSを使う ・Netmiko ☞多段ログイン機能はあるが、SSH前提でモジュールが作られているため 難しい ・PyATS ☞Telnetでも多重接続可能。しかし弊社製NW機器なのでOSタイプとして 指定できない 壁2:Telnet
& 踏み台
壁2:Telnet & 踏み台 Idea 2. Ansibleのexpectモジュールを使う --- - expect: command:
telnet X.X.X.X response: Login: username Password: password Ansibleサーバ 踏み台機器 ターゲット機器 Telnet Telnet telnet X.X.X.X User ID Password show run Playbook show run CLI(ansibleから実行されるコマンド) CLI(ansibleから実行されるコマンド)
壁2:Telnet & 踏み台 ◆expectモジュールのAnsibleドキュメントより引用 “expectモジュールはシンプルな使い方を想定して作られている。 複雑な事をしたいときはshellモジュールかscriptモジュールを使ってね。“ Shellモジュールでのexpect使い方例 ・踏み台経由での使い方は複雑 ・NW機器は種類によってプロンプトが異なる ・プロンプトの条件分岐をPlaybookで書き切るのは大変
Ansibleモジュールだけでexpectの実現は厳しそう。
Idea 3. 自前でexpectスクリプトを書いてPlaybookで呼び出した JUMP_HOST: X.X.X.X JUMP_User: telnet_user JUMP_Password: password インベントリ変数に踏み台ホストの
ログイン情報の変数を定義 ※group_vars/host/vars.yml - name: run expect delegate_to: localhost command: "{{ EXPECT_SCRIPT_PATH + ' ' + JUMP_HOST + ' ' + JUMP_USERNAME + ' ' + JUMP_PASSWORD + ' ' + JUMP_ENABLE + ' ' + ansible_host + ' ' + ansible_user + ' ' + ansible_password + ' ' + ansible_become_pass + ' ' + CMD_LIST|join(' ') }}" vars: CMD_LIST: - 'show¥ diff¥ run¥ start' expectスクリプトを呼び出すプレイブック 壁2:Telnet & 踏み台
壁3:実行後結果の分析 - block: - telnet: commands: show diff run start
delegate_to: localhost register: r - set_fact: _stdout: “{{ r.stdout }}” _diff: “{ % if stdout %}差分あり{% else %}差分無し{% endif %}” _result: “{{ ‘NG’ if r.failed else ‘OK’ }}” rescue: - set_fact: _result: ‘NG’ host, address, result, 差分 {% for host in ansible_play_hosts -%} {% set inventory=host %} {% set address=hostvars[host][‘ansible_host ’] %} {% set result=hostvars[host][‘_result’] %} {% set diff=hostvars[host][‘_diff’] %} {{ inventory }},{{ address }},{{ result }}, {{ diff }} {% endfor %} ・何も出力が無ければ差分が無いので、その結果を格納する変数を定義 ・コマンドの実行の成否を確認するための変数も用意 ・使用モジュール: block, set_fact, telnet host address 疎通結果 差分 host1 1.1.1.1 OK 差分あ り host2 2.2.2.2 NG - host3 3.3.3.3 OK 差分無 し ・ ・ ・ レポート(CSVファイル) ・1,000台分の実行ログを辿るのは無理 ☞インベントリグループごとに、疎通可否/差分の有無の結果をまとめたCSVレポートを作成した
壁3:実行結果の分析 ~レポート~ 生成したCSVレポートをJupyter Notebookで分析 ☞「何が・何に」失敗したのか即時把握が可能 ☞作業現場でしかできない失敗原因分析に取り掛かれる ※レポート確認に時間を取られずに済み、確認作業にリソースを回せる ・インベントリグループごとにNGだった機器数 を分析 ☞その場で原因調査が可能
・差分ありのホストを表示したり ☞その場でどんな差分があるのか確認できる/分析作業が楽
仕上げ:NG/差分ありだった機器はどうする? host address result 差分 host1 1.1.1.1 OK 差分あ り
host2 2.2.2.2 NG - host3 3.3.3.3 OK 差分無 し レポート(CSVファイル) ・ ・ ・ Inventory File ・Task1:NGホストだけを読み取ったInventory Fileを生成し後日、 正しい情報で再確認できるようにした ・Task2:差分ありホストだけを読み取ったInventory Fileを作成し後日、 設定保存できていないホストだけにcopyコマンドを実行する Playbookを実行できるようにした
おまけ:こんなこともできるよ ◆インベントリ情報 ☞グラフ出力でどの拠点のホストが 多いか一目でわかる
1, 「Ansibleまでの道のり」を解決しておくとオートメーションの世界がグっと広がる! 2, Telnetでも諦めなければ道は開ける!! ※最初からSSHを使いましょう。 3, 多数の機器をAnsibleで扱う場合、実行結果は何らかのデータ型で まとめておくと便利(json, csv等) ☞理想:
今回作成したAnsible実行結果のレポートをデータベースに格納して運用する トライアルをしてみたい まとめ