在現代科技世界中,網路裝置監控與通知非常重要。LibreNMS 是一個開源的網路監控系統,可以用來監控網絡設備、伺服器…等。然而,對於一些使用者而言,LibreNMS 的通知設定可能會有一些小困難。我們將在這個系列文章中介紹幾種常用的通知方式:電子郵件、LINE、Telegram、GoogleChat…等。這些通知方式都可幫助使用者即時收到監視警報和報告,以便快速回應並保護他們的系統和網絡安全。
LibreNMS 系列文:
-
用 Docker 來架設 LibreNMS 架設網路服務監控系統
https://blog.jks.coffee/setup-librenms-using-docker/ -
用 Gmail 來串接 LibreNMS 的 Email 通知
https://blog.jks.coffee/librenms-gmail-alert-setup/ -
LibreNMS 串接 LINE 通知
https://blog.jks.coffee/librenms-line-message-alert-setup/
剛好工作會用到 LINE,所以把通知轉到 LINE 去,就讓我們看看要怎麼做吧!
Table of Contents
抓下 Pull Request 的內容
目前截稿至今,目前還沒有人把 LINE 機器人通知功能的做進去,
小弟就順手貢獻程式碼,把這個功能加上 😎。
當然 LibreNMS 整套程式授權是 GPL,想當然爾貢獻的程式碼也是 GPL,歡迎大家使用。
只是官方還沒有允許 Pull Request 的內容,
如果覺得不錯,可以幫忙在原串留個言,加速系統演進。
https://github.com/librenms/librenms/pull/14802
也因為目前小弟貢獻的程式碼尚未被合併,預設這功能「沒有包含」在官方系統裡,
需要你手動抓檔案來補
按下 Raw 得到原始檔,然後另存新檔,存成 LineMessagingAPI.php
。
如果跟我一樣是使用 Docker 的話,
放在目錄中,修改 docker-compose.yml
把這個檔案用掛載的方式,
類似 Hot patch 的方式把它放進去
在 docker-compose.yml
的 LibreNMS 設定,裡頭的 volumes 區塊,加上一句:
- ./LineMessagingAPI.php:/opt/librenms/LibreNMS/Alert/Transport/Linemessagingapi.php
(注意大小寫!)
如果你是照個之前那篇文的方式架設的話,
變成類似底下的範例:
docker-compose.yml
version: '3.5'
services:
web:
image: jarischaefer/docker-librenms
restart: always
ports:
- '80:80'
volumes:
- ./librenms_data/logs:/opt/librenms/logs
- ./librenms_data/rrd:/opt/librenms/rrd
# Add this line
- ./LineMessagingAPI.php:/opt/librenms/LibreNMS/Alert/Transport/Linemessagingapi.php
environment:
APP_KEY: base64:NA......................................SdA=
DB_HOST: librenms_database
DB_USER: librenms
DB_PASS: Tuq.........tai
DB_NAME: librenms
POLLERS: 16
BASE_URL: http://192.168.1.2
TZ: Asia/Taipei
depends_on:
- mysql
mysql:
image: mariadb:10.5
container_name: librenms_database
restart: always
volumes:
- ./librenms_data/mysql:/var/lib/mysql
- ./LineMessagingAPI.php:/opt/librenms/LibreNMS/Alert/Transport/Linemessagingapi.ph
environment:
TZ: Asia/Taipei
MYSQL_ROOT_PASSWORD: Cho.........lan
MYSQL_USER: librenms
MYSQL_PASSWORD: Tuq.........tai
MYSQL_DATABASE: librenms
官方 docker 架設方式也雷同,就不贅述了。
設定 LINE 開發者帳號
1. 前往Line開發者網站並註冊帳戶
使用您的真人帳號來進行註冊。
2. 新增一個 Channel (頻道)
- 如果你沒有 Provider (供應商),請先建立一個。
- 創建一個 Channel (頻道),選擇 Messaging API ,然後填寫表單。
一些必填欄位說明:
- Channel type 頻道類型:Messaging API
- Provider 供應商:(選擇您的 Provider (供應商))
- Company or owner’s country or region 公司或擁有者的國家或地區:(選擇您的地區)
- Channel name 頻道名稱:(預設它將是您的 LINE機器人的名稱,送出後無法編輯)
- Channel description 頻道描述:(預設它將是您的 LINE 機器人的描述)
- Category 類別:(選擇適當的類別)
- Subcategory 子類別:(選擇適當的子類別)
然後按送出建立它。
- 到 Channel 的 "Messaging API" 頁籤,這裡列出了一些你需要注意的重要值。
Bot basic ID
和QR code
是您的 LINE 機器人的 ID 和 QR code。Channel access token (long-lived)
,通行 token ,效力等同於密碼,這將在 LibreNMS 中使用,請妥善保管。
- 使用您的真實 LINE 帳號加你建立的 LINE機器人為好友。
3. 設置 webhook 以獲取「收件人ID」
這邊講的「收件人ID」是指,你未來希望系統要把訊息發送到哪裡
它可以是
- 聊天群組(要抓取
groupID
) - 個人私訊(要抓取
userID
)
以下是獲取「收件人ID」的步驟。
使用以下 NodeJS 程式和 ngrok
轉送臨時 https 連線。
以下步驟是在 Mac 底下操作。Linux 也適用這些步驟。
抓取程式
git clone https://github.com/j796160836/LINE-bot-RecipientFetcher.git
切換到該資料夾
cd LINE-bot-RecipientFetcher
執行程式
$ node index.js
使用 ngrok
將該連接埠暴露到網路上
ngrok http 3000
到 Channel (頻道) 中的 "Messaging API" 頁籤,
將 Webhook URL 填寫 ngork
所產生的網址 https://<your ngrok domain>/webhook
4. 獲取「收件人ID」
如果您想讓 LINE 機器人向自己(或者目標發送對象)發送訊息,這是獲取 userID
的步驟。
- 使用您的真實帳戶(或者目標發送對象)向您的 LINE 機器人發送訊息
範例資料:
{"type":"user","userId":"U527xxxxxxxxxxxxxxxxxxxxxxxxxc0ee"}
如果您想讓 LINE 機器人向一個群組發送訊息,這是獲取 groupID
的步驟。
- 將您的LINE機器人添加到群組中
- 使用您的真實帳戶在群組中發訊息
程式會把 groupID
印出來,這個就是收件人ID,請保管好。
範例資料:
{"type":"group","groupId":"Ce51xxxxxxxxxxxxxxxxxxxxxxxxxx6ef","userId":"U527xxxxxxxxxxxxxxxxxxxxxxxxxc0ee"} ```
LibreNMS 的通知設定
接下來回到 LibreNMS 繼續做設定。
1. 設定 Alert transport (通知管道)
到 Alerting
> Alert Transports
頁面,新增一個 Alert transport (通知管道)。
- Transport name 傳輸名稱:Line
- Trsansport type 傳輸類型:Line Messanging API
- Access token 存取權杖:(您的頻道存取權杖)
- Recipient 收件人ID:_(填入剛剛抓的
userID
或MARKDOWN_HASH2df121e268641afe58606b37a6e37a50MARKDOWNHASH
)
2. 在 Alert rules (監控規則) 中掛上 Alert transport (通知管道)
在 Alerts > Alert rules 設定警告通知規則,
在想要通知的規則上按編輯,
(以預設通知 Device Down! Due to no ICMP response 為例)
在 Transports 的地方加上這個通知管道。
可以在 Alert rules 設定好通知的:
- Max alert 通知數:最多要通知幾次
- Delay 延遲:問題發生後,延遲多久再來通知,
過濾掉時好時壞跳來跳去的情況 - Interval 間隔:通知間隔,意指通知後隔多久再通知,該值會配合 Max alert 來使用。
例如:
Max alert: 3 / Delay: 30m / Interval: 5m
白話文就是:先延遲 30 分鐘再通知,通知共 3 次,每 5 分鐘通知一次
這邊可以依照需求來設定通知次數與頻繁度。
如果剛剛 Default Alert 有設定 ON 的話,應該所有規則都會出現才對。
測試
最後,你需要測試他們的通知設置是否正確。可以通過觸發警報或手動測試通知來完成這個步驟。
手動觸發測試
在 Alerts > Alert Transports 中,設定這個通知管道、通知方式。
就會收到測試訊息
以上,就是設定的所有內容,希望這個教學對您有幫助。