」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為 Zabbix 編寫電報和電子郵件通知腳本

為 Zabbix 編寫電報和電子郵件通知腳本

發佈於2024-11-08
瀏覽:780

Writing a Telegram and Email Notifications Script for Zabbix

監控整個基礎架構非常重要,特別是在 IT 基礎架構中。我最近學習創建和編寫這樣的監控腳本。我將向您分享我如何製作電報和電子郵件通知腳本。每當基礎設施出現問題時,此腳本都會發送電報和電子郵件通知。

Zabbix是什麼

Zabbix 是一款開源軟體,可監控網路的眾多參數以及伺服器、虛擬機器、應用程式、服務、資料庫、網站、雲端等的運作狀況和完整性。 Zabbix 使用靈活的通知機制,讓使用者為幾乎任何事件配置基於電子郵件的警報。這允許對伺服器問題做出快速反應。 Zabbix 基於儲存的資料提供出色的報告和資料視覺化功能。這使得 Zabbix 成為容量規劃的理想選擇。

電報通知腳本

透過 SSH 登入您的 Zabbix 代理程式/伺服器並前往「externalscripts」目錄。

cd /usr/lib/zabbix/externalscripts

為 Telegram 機器人建立腳本。在這裡設定您的電報機器人。

sudo vim telegram-notif.sh

貼下面的腳本

#!/bin/bash

# Telegram Bot API Token
BOT_TOKEN="YOUR_BOT_TOKEN"

# Telegram Chat ID
CHAT_ID="YOUR_TELEGRAM_CHAT_ID"

# Message to be sent
MESSAGE="$1"

# Sends the telegram message
curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage" -d "chat_id=$CHAT_ID&text=$MESSAGE"

儲存您的腳本。

:wq

轉換為可執行檔

chmod  x telegram-notif.sh

電子郵件通知腳本

在同一目錄下,建立一個python檔案。

sudo vim email-notif.py

貼上此代碼。此代碼需要您的 Gmail 帳戶的應用程式密碼。在此建立您的應用程式密碼。

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
import sys

# Get the alert message from command-line arguments
alert_message = sys.argv[1]

# Email account credentials
gmail_user = 'YOUR_EMAIL_ADDRESS'
gmail_password = 'YOUR_APP_PASSWORD'  # Use your App Password here

# Create the message
msg = MIMEMultipart()
msg['From'] = gmail_user
msg['To'] = 'YOUR_RECIPIENT_EMAIL_ADDRESS'  # Recipient's email address
msg['Subject'] = 'Alert Message Subject'  # Subject of the email
message = alert_message
msg.attach(MIMEText(message, 'plain'))

# Attempt to send the email
try:
    server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
    server.ehlo()
    server.login(gmail_user, gmail_password)
    server.send_message(msg)
    server.close()

    print('Email sent!')
except Exception as e:
    print('Failed to send email:', e)

不要忘記保存並使其成為可執行檔

:wq
chmod  x email-notif.py

該腳本可以整合到 Zabbix 中,以通知需要盡快解決的問題。

在某些情況下,在伺服器中執行 python 腳本需要 root 權限 (sudo)。要允許 Zabbix 使用 sudo 運行 python 腳本,您必須編輯 visudo.

sudo visudo

找到“用戶權限規範”,將這行程式碼貼到下面。

zabbix  ALL=(ALL) NOPASSWD: /usr/lib/zabbix/externalscripts/your_script.py

所以它看起來像這樣

# User privilege specification
root    ALL=(ALL:ALL) ALL
zabbix  ALL=(ALL) NOPASSWD: /usr/bin/python3
zabbix  ALL=(ALL) NOPASSWD: /usr/lib/zabbix/externalscripts/your_script.py

感謝您的閱讀!

版本聲明 本文轉載於:https://dev.to/kurtchan/writing-a-telegram-and-email-notifications-script-for-zabbix-5ddj?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何處理PHP文件系統功能中的UTF-8文件名?
    如何處理PHP文件系統功能中的UTF-8文件名?
    在PHP的Filesystem functions中處理UTF-8 FileNames 在使用PHP的MKDIR函數中含有UTF-8字符的文件很多flusf-8字符時,您可能會在Windows Explorer中遇到comploreer grounder grounder grounder gro...
    程式設計 發佈於2025-04-16
  • JavaScript事件處理中如何保留實例作用域:通過變量別名捕獲“this”
    JavaScript事件處理中如何保留實例作用域:通過變量別名捕獲“this”
    在事件處理程序中的acpoping:javascript中的“ this” conundrum 在JAVAScript中,實例方法用作事件處理程序可以導致求程問題。當觸發事件處理程序時,“此”的範圍從預期的實例轉移到調用回調的元素。這需要使用變量來“捕獲”並維護實例的範圍。 聲明“自我”變量以使“...
    程式設計 發佈於2025-04-16
  • .NET XML序列化中如何控制命名空間前綴?
    .NET XML序列化中如何控制命名空間前綴?
    .NET XML序列化:命名空間前綴控制 .NET 提供兩種主要的 XML 序列化機制:DataContractSerializer 和 XmlSerializer。然而,它們默認生成的命名空間前綴由內部機制管理,這限制了自定義前綴的需求。 利用 XmlSerializerNamespaces ...
    程式設計 發佈於2025-04-16
  • 在Matplotlib中如何創建可重用的AxesSubplot對象?
    在Matplotlib中如何創建可重用的AxesSubplot對象?
    在matplotlib 從圖實例中解除AxessSubplot創建的情況,人們可以將傳遞軸實例的功能考慮到函數。例如: def plot(x,y,ax = none): 如果斧頭沒有: ax = plt.gca()#獲取當前軸實例(默認) ax.plot(x,y,&...
    程式設計 發佈於2025-04-16
  • 如何避免Go語言切片時的內存洩漏?
    如何避免Go語言切片時的內存洩漏?
    ,a [j:] ...雖然通常有效,但如果使用指針,可能會導致內存洩漏。這是因為原始的備份陣列保持完整,這意味著新切片外部指針引用的任何對象仍然可能佔據內存。 copy(a [i:] 對於k,n:= len(a)-j i,len(a); k
    程式設計 發佈於2025-04-16
  • 如何使用Python理解有效地創建字典?
    如何使用Python理解有效地創建字典?
    在python中,詞典綜合提供了一種生成新詞典的簡潔方法。儘管它們與列表綜合相似,但存在一些顯著差異。 與問題所暗示的不同,您無法為鑰匙創建字典理解。您必須明確指定鍵和值。 For example:d = {n: n**2 for n in range(5)}This creates a dict...
    程式設計 發佈於2025-04-16
  • Java靜態初始化塊使用時機及原因
    Java靜態初始化塊使用時機及原因
    在Java中理解靜態初始化塊,靜態初始化塊提供了一種特殊的機制,可以在類中初始化靜態字段。靜態字段僅初始化一次,並在類的所有實例中共享相同的值。雖然可以在聲明中的靜態字段中分配值,但在某些情況下,這種方法是不切實際的。 為什麼使用靜態初始化障礙? 在其聲明點上無法確定靜態字段的值。例如,想像一下您...
    程式設計 發佈於2025-04-16
  • 為什麼不使用CSS`content'屬性顯示圖像?
    為什麼不使用CSS`content'屬性顯示圖像?
    在Firefox extemers屬性為某些圖像很大,&& && && &&華倍華倍[華氏華倍華氏度]很少見,卻是某些瀏覽屬性很少,尤其是特定於Firefox的某些瀏覽器未能在使用內容屬性引用時未能顯示圖像的情況。這可以在提供的CSS類中看到:。 googlepic { 內容:url(&...
    程式設計 發佈於2025-04-16
  • 左連接為何在右表WHERE子句過濾時像內連接?
    左連接為何在右表WHERE子句過濾時像內連接?
    左JOIN CONUNDRUM:WITCHING小時在數據庫Wizard的領域中變成內在的加入很有趣,當將c.foobar條件放置在上面的Where子句中時,據說左聯接似乎會轉換為內部連接。僅當滿足A.Foo和C.Foobar標準時,才會返回結果。 為什麼要變形?關鍵在於其中的子句。當左聯接的右側...
    程式設計 發佈於2025-04-16
  • 在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在程序退出之前,我需要在C ++中明確刪除堆的堆分配嗎?
    在C中的顯式刪除 在C中的動態內存分配時,開發人員通常會想知道是否有必要在heap-procal extrable exit exit上進行手動調用“ delete”操作員,但開發人員通常會想知道是否需要手動調用“ delete”操作員。本文深入研究了這個主題。 在C主函數中,使用了動態分配變量(...
    程式設計 發佈於2025-04-16
  • 無需刷新頁面,如何重新加載CSS?
    無需刷新頁面,如何重新加載CSS?
    不用頁面refresh 重新加載CSS 一個常見的UX Enhancement是啟用Live CSS編輯,使用戶可以立即看到更改而無需重新加載頁面。了解處理樣式更新的最佳方法可以顯著簡化此過程。 解決方案: 的挑戰很大,請考慮動態性動態性動態多多,以動態操縱樣式圖。以下代碼片段演示了一種有效的方...
    程式設計 發佈於2025-04-16
  • 實現IValidatableObject條件驗證:屬性級別與情景忽略
    實現IValidatableObject條件驗證:屬性級別與情景忽略
    實現 IValidatableObject 中的條件驗證:屬性級特性和基於場景的忽略 問題: 我知道 IValidatableObject 可用於在比較屬性時進行對象驗證。但是,我希望使用屬性來驗證單個屬性,並在某些場景中忽略特定的屬性失敗。我的以下實現是否不正確? public class V...
    程式設計 發佈於2025-04-16
  • 使用Pandas read_csv解析帶不規則分隔符的數據方法
    使用Pandas read_csv解析帶不規則分隔符的數據方法
    在pandas read_csv 以解決這一挑戰,pandas為定義分離器提供了多功能選項。一種方法涉及採用正則表達式(REGEX)。通過在READ_CSV中使用定界符參數,您可以指定捕獲所需分離器的正則表達式模式。這使您可以考慮空間和選項卡的組合,確保准確解析。 另外,您可以利用與python...
    程式設計 發佈於2025-04-16
  • Python中何時用"try"而非"if"檢測變量值?
    Python中何時用"try"而非"if"檢測變量值?
    使用“ try“ vs.” if”來測試python 在python中的變量值,在某些情況下,您可能需要在處理之前檢查變量是否具有值。在使用“如果”或“ try”構建體之間決定。 “ if” constructs result = function() 如果結果: 對於結果: ...
    程式設計 發佈於2025-04-16
  • input: Why Does "Warning: mysqli_query() expects parameter 1 to be mysqli, resource given" Error Occur and How to Fix It?

output: 解決“Warning: mysqli_query() 參數應為 mysqli 而非 resource”錯誤的解析與修復方法
    input: Why Does "Warning: mysqli_query() expects parameter 1 to be mysqli, resource given" Error Occur and How to Fix It? output: 解決“Warning: mysqli_query() 參數應為 mysqli 而非 resource”錯誤的解析與修復方法
    mysqli_query()期望參數1是mysqli,resource給定的,嘗試使用mysql Query進行執行MySQLI_QUERY_QUERY formation,be be yessqli:sqli:sqli:sqli:sqli:sqli:sqli: mysqli,給定的資源“可能發...
    程式設計 發佈於2025-04-16

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3