返回文章列表

DevOps 常用工具 RANCID Cacti mussh

本文介紹了三個在 DevOps 中經常被低估但非常實用的工具:RANCID、Cacti 和 mussh。RANCID 用於網路裝置的組態管理,Cacti 則負責網路效能監控,而 mussh 則簡化了多主機管理。文章探討了每個工具的功能、

DevOps 網路管理

在 DevOps 實務中,除了熱門工具外,一些看似不起眼的工具也能發揮關鍵作用。本文介紹 RANCID、Cacti 和 mussh 三個工具,分別涵蓋網路裝置組態管理、效能監控與多主機管理。透過妥善運用這些工具,能有效提升網路可視性、控制性和自動化程度,進而增強系統穩定性與效能。這些工具雖然不像新興技術那樣引人注目,卻是構建穩固 DevOps 基礎的根本,值得深入瞭解和應用。它們的功能和使用場景,能幫助工程師更好地管理和維護複雜的網路環境,並在日常工作中發揮實質效益。

DevOps 中默默耕耘的五大工具

在當今瞬息萬變的科技世界中,我們往往關注最新、最尖端的解決方案,卻忽略了那些簡單卻有效的工具。DevOps 運動強調持續改進工具,但改進並不總是意味著替換。本文將介紹五個每天都在使用的工具,它們要麼提供洞察力,要麼提供控制力,同時安裝和組態的工作量極小。雖然它們不是最耀眼的工具,但卻經過了時間的考驗,表現出色。

RANCID:網路裝置組態管理的利器

組態管理(CM)工具如 Puppet 和 Chef 對於保持系統的一致性非常有用,但對於基礎設施呢?Really Awesome New Cisco confIg Differ(簡稱 RANCID)是解決這個問題的第一步。RANCID 是一套實用工具,能夠自動將組態保留在版本控制中。如果擁有物理基礎設施,就應該努力實作與伺服器相同的控制水平。

RANCID 的核心功能是為將伺服器連線起來的裝置建立軟體組態和硬體資訊的稽核跟蹤。交換器、路由器和負載平衡器的組態可能不會像 Rails 應用程式中的程式碼變化那麼快,但它們確實會隨著時間而改變。稽核是自動化過程中的第一步,瞭解現在的狀態才能更好地規劃未來。

RANCID 開箱即用,支援多家廠商的裝置,包括 Cisco、Juniper 和 F5。稽核過程需要基本安裝 RANCID 並在裝置上組態唯讀使用者。結果是定期自動提取當前組態,提交到版本控制,並將變更詳情傳送到電子郵件。

RANCID 組態範例

# 設定 RANCID 使用 Git
RCSSYS=git
# 過濾密碼
FILTER_PWDS=YES
# 定義群組列表
LIST_OF_GROUPS="pdx slc ord"

內容解密:

  1. RCSSYS=git:指定 RANCID 使用 Git 作為版本控制系統。
  2. FILTER_PWDS=YES:啟用密碼過濾功能,避免敏感資訊被記錄。
  3. LIST_OF_GROUPS="pdx slc ord":定義了需要管理的裝置群組。

RANCID 支援透過 Telnet 和 SSH 連線裝置,強烈建議使用 SSH 並停用 Telnet。某些裝置支援根據金鑰的身份驗證,如 Juniper 和 F5,可以避免使用密碼。在 .cloginrc 檔案中組態密碼,該檔案位於 RANCID 使用者的家目錄中。

為什麼選擇 RANCID?

  • 自動化組態備份
  • 版本控制變更記錄
  • 多廠商裝置支援

RANCID 是管理網路裝置組態的強大工具,透過自動化和版本控制,提供了對基礎設施變更的清晰可見性。這使得它成為 DevOps 工具箱中的一個重要組成部分。

網路裝置監控與組態管理的利器:RANCID 與 Cacti

在 DevOps 的世界中,監控和管理網路裝置的組態是確保系統穩定執行的關鍵。本文將介紹兩款強大的開源工具:RANCID 和 Cacti,分別用於網路裝置的組態管理和效能監控。

RANCID:網路裝置組態管理

RANCID(Really Awesome New Cisco confIg Differ)是一款用於管理和追蹤網路裝置組態變更的工具。它支援多種網路裝置,包括 Cisco、Juniper 和 F5 等。RANCID 的主要功能包括:

  • 自動收集和儲存網路裝置的組態檔案
  • 追蹤組態變更歷史
  • 支援多種網路裝置型別

設定 RANCID

要使用 RANCID,首先需要在系統上安裝並設定。以下是設定的基本步驟:

  1. 設定 ~/.cloginrc 檔案,指定連線到網路裝置的方法和憑證。
# 示例 ~/.cloginrc 設定
add method * {ssh}
add password *.example.com LoginPassword EnablePassword
add password router.example.com OtherPass AndAnotherPass
  1. 建立一個目錄來存放每個裝置群組的設定檔,例如 ~/pdx/router.db
# 示例 router.db 內容
switch.example.com:cisco:up
router.example.com:juniper:up
balance.example.com:f5:up
  1. 使用 rancid-run 命令手動執行 RANCID,以收集網路裝置的組態。

將 RANCID 與 Git 結合

為了進一步保護組態資料,可以將 RANCID 的本地儲存函式庫推播到遠端的 Git 伺服器。以下是設定的步驟:

  1. 設定 Git 遠端儲存函式庫。
$ git remote add upstream <git url>
  1. 建立 ~/.git/hooks/post-commit 指令碼,在每次提交後自動推播變更到遠端儲存函式庫。
#!/bin/sh
# Push the local repo to my upstream on commit
git push upstream

Cacti:網路效能監控

Cacti 是一款根據 Round Robin Database(RRD)的統計圖形工具,主要用於監控網路裝置的效能。它使用 SNMP(簡單網路管理協定)從裝置收集資料,並提供 Web UI 進行圖形化展示。

Cacti 的主要功能

  • 使用 RRDTool 儲存時間序列資料
  • 提供 Web UI 進行使用者、裝置和圖形的管理
  • 支援範本化組態,方便自定義監控專案

設定 Cacti

  1. 設定 Cacti 的資料保留策略,透過 Round Robin Archives(RRAs)來定義資料儲存的時間和粒度。

  2. 使用 Host Templates 和 Graph Templates 來簡化新裝置的設定。

  3. 組態 SNMP 連線詳細資訊,並啟用自定義的 Data Queries 或指令碼來收集特定資料。

使用 Cacti 監控網路裝置

  1. 透過 Web 表單新增要監控的裝置,指定主機名稱和 Host Template。

  2. 建立圖形並選擇要監控的專案。

  3. 使用 Graph Trees 功能來組織和檢視圖形。

深入探索Cacti與LLDP:監控與網路探索的利器

在DevOps的世界中,監控和網路探索是至關重要的環節。Cacti作為一個強大的監控工具,能夠提供豐富的圖表和資料幫助我們瞭解系統的執行狀態。同時,LLDP(Link Layer Discovery Protocol)協定則能夠幫助我們更好地瞭解網路拓撲結構,實作更有效的網路管理。

Cacti的Graphs檢視:深入瞭解系統監控

Cacti的Graphs檢視為我們提供了一個直觀的方式來檢視系統的監控資料。在這個檢視中,我們可以看到左側的Graph Tree,頂部的快速篩選器,以及主體部分的圖表。雖然Cacti的頁面重新整理機制不是根據AJAX,但它仍然能夠提供動態的內容展示。

圖表分析與時間範圍調整

在Graphs檢視中,所有的圖表預設顯示最近一小時的資料,並且根據Hourly RRA(Round Robin Archive)儲存的資料。如果我們想要檢視特定圖表的全部歷史資料,只需點選該圖表即可進入其完整的歷史資料頁面。這種功能非常有助於我們識別系統的長期趨勢,從而更好地規劃未來的資源。

LLDP:網路探索的利器

LLDP是一種被廣泛支援的網路協定,能夠幫助我們發現直接連線的網路裝置的資訊,包括系統名稱、介面名稱和管理IP等。啟用LLDP後,我們可以輕鬆地瞭解哪台裝置連線到哪個交換機的哪個埠上,從而避免因檔案過時或線纜混亂而導致的錯誤操作。

LLDP的工作原理與組態

LLDP的工作原理非常簡單:裝置透過其網路介面定期傳送自身的資訊,而接收裝置則收集這些資訊並儲存一段時間。這種資訊交換發生在直接連線的乙太網路裝置之間,因此能夠提供準確的鄰居裝置資訊。

以Cisco交換機為例,當我們啟用LLDP並安裝lldpd後,可以透過lldpctl命令檢視鄰居裝置的資訊。這些資訊包括了裝置ID、本地介面、能力(Capability)以及埠ID等。

lldpd組態範例
# 編輯/etc/defaults/lldpd
# 啟用SNMP子代理並啟用CDP
DAEMON_ARGS="-x -c"

內容解密:

  • DAEMON_ARGS="-x -c":這行組態用於啟動lldpd守護程式時加入額外的引數。其中,-x表示啟用SNMP子代理,讓lldpd能夠與SNMP伺服器進行通訊;-c則表示啟用Cisco Discovery Protocol(CDP),使得lldpd能夠與支援CDP的裝置進行通訊。

lldpctl命令的使用

lldpctl命令用於檢視當前的LLDP資訊。預設情況下,它會輸出詳細的資訊。若需要以不同的格式輸出,可以使用-f引數指定輸出格式,如key-value或XML。

lldpctl輸出範例(key-value格式)

$ lldpctl -f keyvalue
lldp.eth0.via=CDPv2
lldp.eth0.rid=4
lldp.eth0.age=8 days, 01:00:23

內容解密:

  • lldpctl -f keyvalue:這條命令用於以key-value格式輸出LLDP資訊。其中,lldp.eth0.via=CDPv2表示透過CDPv2協定接收到資訊;lldp.eth0.rid=4表示鄰居裝置的RID(Router ID)為4;lldp.eth0.age=8 days, 01:00:23表示該資訊的老化時間,即該資訊已經存在了8天1小時0分鐘23秒。

網路診斷與管理工具在DevOps中的應用

在DevOps的實踐中,網路的可視性和控制性是非常重要的。透過適當的工具,可以有效地診斷和最佳化網路效能,從而提高整體的系統穩定性和效能。本文將介紹幾種在DevOps領域中被低估但非常實用的工具,包括LLDP(Link Layer Discovery Protocol)資訊收集、IPerf網路效能測試工具,以及MultiHost SSH Wrapper(mussh)等。

利用LLDP收集網路拓撲資訊

LLDP是一種網路協定,用於在網路裝置之間交換資訊。透過LLDP,可以收集到裝置之間的連線資訊,如連線的交換機、埠號等。這些資訊對於理解網路拓撲結構和進行自動化的網路管理非常有幫助。

LLDP資訊範例

lldp.eth0.chassis.local=switch.example.com
lldp.eth0.chassis.name=switch.example.com
lldp.eth0.chassis.descr=cisco WS-C2924-XL
lldp.eth0.chassis.mgmt-ip=192.168.1.2
lldp.eth0.chassis.Bridge.enabled=on
lldp.eth0.port.ifname=FastEthernet0/2
lldp.eth0.port.descr=FastEthernet0/2
lldp.eth0.vlan.vlan-id=1
lldp.eth0.vlan.pvid=yes
lldp.eth0.vlan=VLAN #1

內容解密:

上述資訊顯示了一台伺服器透過LLDP協定收集到的網路連線資訊。其中包括了連線的交換機的主機名、描述、管理IP、埠名稱和描述,以及VLAN的相關資訊。這些資訊對於自動化組態管理和監控組態的生成非常有價值。

使用IPerf進行網路效能測試

IPerf是一款用於測試網路效能的工具,支援TCP和UDP協定,可以測量兩點之間的頻寬。透過IPerf,可以有效地評估網路的效能和找出潛在的網路瓶頸。

TCP模式範例

# 伺服器端
$ iperf -s
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
[ 4] local 192.168.1.101 port 5001 connected with 192.168.1.100 port 43697
[ ID] Interval Transfer Bandwidth
[ 4] 0.0-10.1 sec 114 MBytes 94.1 Mbits/sec

# 使用者端
$ iperf -c 192.168.1.101
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
Client connecting to 192.168.1.101, TCP port 5001
TCP window size: 22.9 KByte (default)
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
-
---
[ 3] local 192.168.1.100 port 43697 connected with 192.168.1.101 port 5001
[ ID] Interval Transfer Bandwidth
[ 3] 0.0-10.0 sec 114 MBytes 95.0 Mbits/sec

內容解密:

上述範例展示瞭如何使用IPerf進行TCP模式下的網路效能測試。伺服器端監聽在TCP埠5001,使用者端連線到伺服器並進行資料傳輸。測試結果顯示了傳輸的資料量和頻寬。透過-r-d引數,可以進行雙向測試。

使用MultiHost SSH Wrapper(mussh)進行多主機管理

mussh是一款根據SSH的指令碼包裝器,允許使用者在多台主機上執行相同的命令。這對於需要在多台伺服器上執行一次性任務或臨時命令的場景非常有用。

mussh使用場景

雖然組態管理工具可以保證系統狀態的一致性,但在某些情況下,我們需要執行一些非例行性的任務。mussh提供了一個簡單的方式來實作這一點。

揭開 DevOps 中默默耕耘的工具:以 mussh 實作跨主機同步 NTP 為例

在 DevOps 的世界裡,我們經常關注那些嶄新的技術和工具,卻忽略了過去那些默默貢獻的老將。在最近一次硬體升級後,我遇到了一個服務的網路佇列時間大幅增加的問題。由於 NTP 組態和服務狀態是透過組態管理(CM)進行強制執行的,我知道 NTP 服務正在執行,但我想確認所有系統時鐘都已同步。手動透過 SSH 連線到每一台主機顯然不是一個高效的方法,這時 mussh 這款工具就派上了用場。

同步 NTP 跨多主機平行處理

$ mussh \
-l pi \ 
-m 2 \ 
-h rpi-1 rpi-2 \ 
-c 'sudo ntpdate -u ntp.home'
pi@rpi-1: ntpdate: adjust time server ntp.home offset 0.0151 sec
pi@rpi-2: ntpdate: adjust time server ntp.home offset 0.0006 sec

內容解密:

  1. $ mussh:mussh 是一個允許使用者在多台主機上平行執行 SSH 命令的工具。
  2. -l pi:指定 SSH 連線的使用者名稱為 pi
  3. -m 2:設定同時執行命令的主機數量為 2,表示 mussh 會同時在兩台主機上執行命令。
  4. -h rpi-1 rpi-2:指定要執行命令的主機名稱,這裡是 rpi-1rpi-2
  5. -c 'sudo ntpdate -u ntp.home':要執行的命令是 sudo ntpdate -u ntp.home,用於與指定的 NTP 伺服器 ntp.home 同步時間。

輸出結果的格式為 主機名稱: 命令輸出內容,這在預期單行輸出的情況下非常有用。如果需要多行輸出,可以使用 -b 引數來緩衝每個主機的輸出,避免輸出混雜在一起。

使用檔案輸入主機名稱列表

為了避免每次輸入所有伺服器名稱,mussh 支援使用 -H 選項從檔案中讀取主機名稱,每行一個主機名稱。這樣,我們可以從任何儲存機制(例如檔案、資料函式庫或 RESTful API)中取得主機列表並傳入 mussh。

$ grep "rpi-" servers.txt | mussh -l pi -H - -c 'uptime'
pi@rpi-1: 21:12:54 up 4 days, 23:18, 1 user, load average: 0.00
pi@rpi-2: 21:12:54 up 4 days, 23:18, 1 user, load average: 0.00

內容解密:

  1. grep "rpi-" servers.txt:從 servers.txt 檔案中篩選包含 rpi- 的行,即擷取相關的主機名稱。
  2. mussh -l pi -H - -c 'uptime':mussh 從標準輸入讀取主機名稱列表,並對這些主機執行 uptime 命令。
  3. -H -:告訴 mussh 從標準輸入讀取主機列表,這裡是透過管道傳入的。

結語

我們仍能從過去的經驗中學習到許多寶貴的知識。那些舊有的工具不僅在過去發揮了重要作用,也激發了新一代工具的發展與創新。本文中提到的工具,有些已經有了新的繼承者,有些仍在積極開發中,需要更多的開發者投入來推動它們邁向新的高度。無論如何,這些工具都對我們今天所處的技術環境做出了貢獻,值得我們給予肯定與讚賞。

作者簡介

Jonathan Thurman 是 New Relic 的一位 Site Reliability Engineer,他運用系統、網路和編碼技能來自動化公司的基礎設施。在過去的15年中,他參與了多個不同型別的專案,包括統一通訊、效能測試、自動化和 Web 縮放等。