~監控節點安裝
1. 系統準備
1.1 更新系統并安裝依賴
sudo yum install -y httpd php php-cli gcc glibc glibc-common gd gd-devel make net-snmp openssl-devel wget unzip sudo yum install -y epel-release ?# 安裝 EPEL 倉庫 sudo yum install -y automake autoconf libtool #安裝 Autotools 和依賴
2. 創建 Nagios 用戶和組
sudo useradd nagios sudo groupadd nagcmd sudo usermod -a -G nagcmd nagios sudo usermod -a -G nagcmd apache ?# 允許 Apache 訪問 Nagios
3. 安裝 Nagios Core
3.1 下載并編譯源碼
cd /tmp wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.4.6.tar.gz tar xzf nagios-4.4.6.tar.gz cd nagios-4.4.6 ? # 配置、編譯、安裝 ./configure --with-command-group=nagcmd make all sudo make install sudo make install-config ? ?# 安裝默認配置文件 sudo make install-commandmode
4. 安裝 Nagios 插件
4.1 下載并編譯插件
cd /tmp wget https://nagios-plugins.org/download/nagios-plugins-2.3.3.tar.gz tar xzf nagios-plugins-2.3.3.tar.gz cd nagios-plugins-2.3.3 ? # 配置、編譯、安裝 ./configure --with-nagios-user=nagios --with-nagios-group=nagios make sudo make install
5. 配置 Apache 和 Web 界面
5.1 生成 Apache 配置文件
sudo cp /tmp/nagios-4.4.6/sample-config/httpd.conf /etc/httpd/conf.d/nagios.conf
5.2 配置身份驗證
# 創建 Web 登錄用戶(例如 `nagiosadmin`) sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin # 輸入兩次密碼
5.3 重啟 Apache
sudo systemctl start httpd sudo systemctl enable httpd
6. 配置 Systemd 服務
6.1 創建服務文件
sudo vi /etc/systemd/system/nagios.service
添加以下內容:
[Unit] Description=Nagios Wants=network-online.target After=network-online.target ? [Service] Type=forking ExecStart=/usr/local/nagios/bin/nagios /usr/local/nagios/etc/nagios.cfg ExecReload=/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg && /usr/local/nagios/bin/nagios -s reload ? [Install] WantedBy=multi-user.target
6.2 啟動 Nagios 服務
sudo systemctl daemon-reload sudo systemctl start nagios sudo systemctl enable nagios sudo systemctl status nagios ?# 檢查狀態應為 active (running)
7. 配置防火墻
sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --reload
8. 調整 SELinux 策略(可選)
sudo setenforce 0 ?# 臨時禁用 SELinux(測試用) # 或永久調整策略 sudo ausearch -c 'nagios' --raw | audit2allow -M my-nagios sudo semodule -i my-nagios.pp
9. 訪問 Nagios Web 界面
通過瀏覽器訪問:
http://<服務器IP>/nagios? sudo chown -R nagios:nagios /usr/local/nagios sudo chmod -R 755 /usr/local/nagios ? 1. 檢查 Nagios 配置文件 運行配置驗證命令,確保無語法錯誤: sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg ?關鍵點: 如果輸出顯示錯誤(如 Error processing object config files),需按提示修復配置文件。 常見錯誤:未閉合的引號、錯誤的主機/服務定義、插件路徑錯誤。 ?2. 調整 Systemd 服務超時時間 編輯服務文件,增加啟動超時時間(默認 90 秒): sudo vi /etc/systemd/system/nagios.service 修改以下參數: [Service] TimeoutStartSec=300 ?# 增加至 300 秒(5 分鐘) TimeoutStopSec=30 ? ?# 停止超時 30 秒 重新加載并重啟服務: sudo systemctl daemon-reload sudo systemctl restart nagios
-
用戶名:
nagiosadmin
-
密碼:之前設置的密碼
10. 添加被監控節點
10.1 創建主機配置文件
sudo vi /usr/local/nagios/etc/objects/hosts.cfg
添加主機定義(示例):
define host {host_name ? ? ? node1alias ? ? ? ? ? Node1 Server # 被監控節點 IPaddress ? ? ? ? 192.168.1.100check_command ? check-host-alivemax_check_attempts 5check_interval ? 5check_period ? ? 24x7contacts ? ? ? nagiosadmin }
10.2 創建服務配置文件
sudo vi /usr/local/nagios/etc/objects/services.cfg
添加服務定義(示例):
sudo cat /usr/local/nagios/etc/objects/templates.cfg ? sudo nano /usr/local/nagios/etc/objects/services1.cfg define service {use ? ? ? ? ? ? ? ? local-service #cat /usr/local/nagios/etc/objects/templates.cfg的service的namehost_name ? ? ? ? ? node1service_description Disk Usagecheck_command ? ? ? check_nrpe!check_diskcontacts ? ? ? ? ? nagiosadmin } ? sudo nano /usr/local/nagios/etc/objects/services.cfg define service {use ? ? ? ? ? ? ? ? local-service #cat /usr/local/nagios/etc/objects/templates.cfg的service的namehost_name ? ? ? ? ? ? ? node1service_description ? ? CPU Loadcheck_command ? ? ? ? ? check_nrpe!check_loadcontacts ? ? ? ? ? ? ? nagiosadmin }
10.3 配置 check_nrpe
命令
編輯 /usr/local/nagios/etc/objects/commands.cfg
,添加:
define command {command_name ? check_nrpecommand_line ? $USER1$/check_nrpe -H $HOSTADDRESS$ -t 30 -c $ARG1$ }
10.4 驗證并重啟 Nagios
sudo vi /usr/local/nagios/etc/nagios.cfg cfg_file=/usr/local/nagios/etc/objects/hosts.cfg cfg_file=/usr/local/nagios/etc/objects/services1.cfg cfg_file=/usr/local/nagios/etc/objects/services2.cfg ? sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg ?# 驗證配置 sudo systemctl restart nagios ?
11. 驗證監控狀態
-
Web 界面:登錄后查看
Hosts
和Services
狀態是否為綠色(OK)。 -
命令行驗證:/usr/local/nagios/libexec/check_nrpe -H <被監控節點IP> -c check_load
在 CentOS 7 主監控節點上安裝 check_nrpe
插件的詳細步驟
check_nrpe
是 Nagios 主監控節點用來通過 NRPE 協議與被監控節點通信的核心插件。以下是安裝和配置的完整流程:
1. 安裝依賴
sudo yum update -y sudo yum install -y gcc make openssl-devel automake autoconf wget
2. 下載并編譯 NRPE 源碼
2.1 下載源碼包
cd /tmp wget https://githubfast.com/NagiosEnterprises/nrpe/releases/download/nrpe-4.1.0/nrpe-4.1.0.tar.gz tar xzf nrpe-4.1.0.tar.gz cd nrpe-4.1.0
2.2 配置并編譯插件
僅編譯 check_nrpe
插件(無需安裝完整的 NRPE 服務):
./configure --with-ssl=/usr/bin/openssl make check_nrpe ?# 僅編譯插件
3. 安裝 check_nrpe
插件
3.1 手動復制插件到 Nagins 插件目錄
sudo cp src/check_nrpe /usr/local/nagios/libexec/
3.2 設置權限
sudo chown nagios:nagios /usr/local/nagios/libexec/check_nrpe sudo chmod 755 /usr/local/nagios/libexec/check_nrpe
4. 驗證插件功能
測試插件是否能連接被監控節點:
/usr/local/nagios/libexec/check_nrpe -H <被監控節點IP> -c check_load
5. 配置 Nagios 使用 check_nrpe
5.1 定義命令
編輯 Nagios 命令配置文件:
sudo vi /usr/local/nagios/etc/objects/commands.cfg
添加以下內容:
define command {command_name ? check_nrpecommand_line ? $USER1$/check_nrpe -H $HOSTADDRESS$ -t 30 -c $ARG1$ }
5.2 添加主機和服務定義
示例主機配置文件(如 hosts.cfg
):
define host {host_name ? ? ? node1alias ? ? ? ? ? Node1 Serveraddress ? ? ? ? 192.168.1.100check_command ? check-host-alivemax_check_attempts 5check_interval 5check_period ? 24x7contacts ? ? ? nagiosadmin } ? define service {host_name ? ? ? ? ? ? ? node1service_description ? ? CPU Loadcheck_command ? ? ? ? ? check_nrpe!check_loadcheck_interval ? ? ? ? 5check_period ? ? ? ? ? 24x7notification_interval ? 30contacts ? ? ? ? ? ? ? nagiosadmin }
5.3 驗證并重啟 Nagios
sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg sudo systemctl restart nagios ? ? 后臺運行 sudo nohup /usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg >/dev/null 2>&1 & ? 殺死進行 kill -9 $(ps -aux | grep nagios | grep -v "grep" | awk -F " " '{print $2}') ? ?
~被監控節點
1. 系統準備
1.1 更新系統并安裝依賴
sudo yum install -y epel-release sudo yum install -y gcc make openssl-devel automake autoconf wget
2. 創建 Nagios 用戶和組
# 創建 Nagios 用戶和組(如果不存在) sudo useradd -r -s /sbin/nologin nagios sudo groupadd nagcmd sudo usermod -a -G nagcmd nagios
3. 安裝 Nagios 插件
3.1 下載并編譯插件
cd /tmp wget https://nagios-plugins.org/download/nagios-plugins-2.3.3.tar.gz tar xzf nagios-plugins-2.3.3.tar.gz cd nagios-plugins-2.3.3 ? # 配置、編譯、安裝 ./configure --with-nagios-user=nagios --with-nagios-group=nagios make sudo make install ? # 驗證插件安裝 ls /usr/local/nagios/libexec/check_* ?# 應顯示插件列表
4. 安裝和配置 NRPE
4.1 下載并編譯 NRPE
cd /tmp wget https://githubfast.com/NagiosEnterprises/nrpe/releases/download/nrpe-4.1.0/nrpe-4.1.0.tar.gz tar xzf nrpe-4.1.0.tar.gz cd nrpe-4.1.0 ? # 配置并編譯 ./configure \--with-nagios-user=nagios \--with-nagios-group=nagios \--with-ssl=/usr/bin/openssl ? make all sudo make install
4.2 配置 NRPE 服務
編輯配置文件 /usr/local/nagios/etc/nrpe.cfg
:
sudo vi /usr/local/nagios/etc/nrpe.cfg
修改以下參數:
# 替換為實際IP allowed_hosts=127.0.0.1,192.168.198.206 # 監聽所有接口或者指定接口的IP地址 server_address=0.0.0.0 server_port=5666 command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,5 -c 30,25,20 command[check_mem]=/usr/local/nagios/libexec/check_mem -w 20% -c 10%
4.3 創建 Systemd 服務文件
sudo vi /etc/systemd/system/nrpe.service
添加以下內容:
[Unit] Description=NRPE (Nagios Remote Plugin Executor) After=network.target ? [Service] Type=simple User=nagios Group=nagios ExecStart=/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d Restart=on-failure ? [Install] WantedBy=multi-user.target
4.4 啟動 NRPE 服務
sudo systemctl daemon-reload sudo systemctl start nrpe sudo systemctl enable nrpe sudo systemctl status nrpe ?# 檢查狀態應為 active (running)
5. 配置防火墻
開放 NRPE 默認端口(5666):
sudo firewall-cmd --permanent --add-port=5666/tcp sudo firewall-cmd --reload
6. 調整 SELinux 策略(可選)
6.1 臨時禁用 SELinux 測試
sudo setenforce 0
6.2 永久調整策略(推薦)
sudo yum install -y policycoreutils-python ? sudo ausearch -c 'nrpe' --raw | audit2allow -M my-nrpe sudo semodule -i my-nrpe.pp
7. 驗證 NRPE 功能
7.1 在 Nagios 主服務器上測試
# 測試 NRPE 連通性 /usr/local/nagios/libexec/check_nrpe -H <被監控節點IP> ? # 測試具體命令(如檢查磁盤) /usr/local/nagios/libexec/check_nrpe -H <被監控節點IP> -c check_disk
~在 CentOS 7 上使用 Grafana + InfluxDB 展示 Nagios 監控數據的詳細步驟
以下是將 Nagios 監控數據存儲到 InfluxDB,并通過 Grafana 可視化的完整流程:
1. 安裝并配置 InfluxDB
1.1 安裝 InfluxDB
# 添加 InfluxDB 倉庫 cat <<EOF | sudo tee /etc/yum.repos.d/influxdb.repo [influxdb] name = InfluxDB Repository baseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stable enabled = 1 gpgcheck = 1 gpgkey = https://repos.influxdata.com/influxdb.key EOF ? # 安裝并啟動服務 sudo yum install influxdb sudo systemctl start influxdb sudo systemctl enable influxdb
1.2 創建數據庫和用戶
# 進入 InfluxDB CLI influx ? # 創建數據庫和用戶 CREATE DATABASE nagios; CREATE USER nagios_user WITH PASSWORD 'your_password' WITH ALL PRIVILEGES; GRANT ALL ON nagios TO nagios_user; exit
2. 安裝并配置 Grafana
2.1 安裝 Grafana
# 添加 Grafana 倉庫 sudo tee /etc/yum.repos.d/grafana.repo <<EOF [grafana] name=grafana baseurl=https://rpm.grafana.com repo_gpgcheck=1 enabled=1 gpgcheck=1 gpgkey=https://rpm.grafana.com/gpg.key sslverify=1 sslcacert=/etc/pki/tls/certs/ca-bundle.crt EOF ? # 安裝并啟動服務 sudo yum install grafana sudo systemctl start grafana-server sudo systemctl enable grafana-server
2.2 訪問 Grafana
-
打開瀏覽器訪問:
http://<服務器IP>:3000
,默認賬號:admin/admin
。
3. 配置 Nagios 將數據寫入 InfluxDB
3.1 安裝 NCPA(Nagios Cross-Platform Agent)
# 下載并安裝 NCPA wget https://assets.nagios.com/downloads/ncpa/ncpa-2.4.0-1.el7.x86_64.rpm sudo rpm -i ncpa-*.rpm ? # 配置 NCPA(允許主節點訪問) sudo nano /usr/local/ncpa/etc/ncpa.cfg # 修改以下參數: allowed_hosts = 127.0.0.1,<Nagios主節點IP> community_string = your_community_string ? # 重啟服務 sudo systemctl restart ncpa_listener
3.2 配置 Nagios 輸出到 InfluxDB
# 安裝依賴工具(用于發送數據到 InfluxDB) sudo yum install python3-pip # 指定安裝到系統目錄 sudo pip3 install --target=/usr/lib64/python3.6/site-packages influxdb
~被監控節點
腳本內容**:
# 創建數據發送腳本 vi /usr/local/nagios/libexec/check_cpu_custom.sh # cat /usr/local/nagios/libexec/check_cpu_custom.sh #!/bin/bash ? # 設置區域為使用小數點格式 export LC_ALL=C ? # 定義 InfluxDB 連接參數 INFLUXDB_HOST="192.168.198.206" ? ? ? ? ?# InfluxDB 服務器地址 INFLUXDB_PORT="8086" ? ? ? ? ? ? ? # 端口 INFLUXDB_DB="nagios" ? ? ? # 數據庫名 INFLUXDB_USER="nagios_user" ? ? ? ? ? ? # 用戶名 INFLUXDB_PASS="admin@123" ? ? ?# 密碼 HOST_NAME=$(hostname -s) ? ? ? ? ? # 獲取主機名 ? # 獲取CPU使用率(基于/proc/stat的可靠方法) # 第一次采樣 read -r cpu user nice system idle iowait irq softirq steal guest guest_nice < /proc/stat total1=$((user + nice + system + idle + iowait + irq + softirq + steal)) idle1=$((idle + iowait)) ? sleep 1 ? # 第二次采樣 read -r cpu user nice system idle iowait irq softirq steal guest guest_nice < /proc/stat total2=$((user + nice + system + idle + iowait + irq + softirq + steal)) idle2=$((idle + iowait)) ? # 計算差值 total_diff=$((total2 - total1)) idle_diff=$((idle2 - idle1)) ? # 計算使用率(保留兩位小數) if [ $total_diff -eq 0 ]; thenusage=0.00 elseusage=$(echo "scale=2; 100 * ($total_diff - $idle_diff) / $total_diff" | bc)usage=$(printf "%.2f" $usage) ?# 確保格式為 0.00 fi ? # 判斷狀態碼 if [ $(echo "$usage >= 90" | bc -l) -eq 1 ]; thenstatus_code=2status_text="CRITICAL" elif [ $(echo "$usage >= 80" | bc -l) -eq 1 ]; thenstatus_code=1status_text="WARNING" elsestatus_code=0status_text="OK" fi ? # 生成納秒級時間戳 #timestamp=$(date +%s%N) timestamp=$(date +%s%N) ? ? # 發送數據到 InfluxDB(包含狀態碼) curl -i -XPOST "http://${INFLUXDB_HOST}:${INFLUXDB_PORT}/write?db=${INFLUXDB_DB}&u=${INFLUXDB_USER}&p=${INFLUXDB_PASS}" \--data-binary "cpu_usage,host=${HOST_NAME} value=${usage},status=${status_code} ${timestamp}" ? # 輸出Nagios狀態 echo "${status_text} - CPU使用率: ${usage}% | usage=${usage}%;80;90" exit $status_code ? 驗證腳本 chown nagios:nagios /usr/local/nagios/libexec/check_cpu_custom.sh chmod 755 /usr/local/nagios/libexec/check_cpu_custom.sh ./usr/local/nagios/libexec/check_cpu_custom.sh
編輯nrpe.cfg文件,進行追加內容
vi /usr/local/nagios/etc/nrpe.cfg ? command[check_cpu_custom]=/usr/local/nagios/libexec/check_cpu_custom.sh
~ 監控節點
設置權限**:
3.3 配置 Nagios 命令**
# 編輯 commands.cfg sudo vi /usr/local/nagios/etc/objects/commands.cfg ? # 添加以下命令定義 define command {command_name ? check_cpu_customcommand_line ? ?$USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ } ? 試驗 /usr/local/nagios/libexec/check_nrpe -H 被監控節點IP地址 -c check_cpu_custom
3.4 修改服務模板
在服務定義中添加 submit_to_influxdb
命令:
define service {use ? ? ? ? ? ? ? ? ? ? local-servicehost_name ? ? ? ? ? ? ? node1service_description ? ? CPU Usage#check_command參數對應commands.cfg文件中參數,前面固定填寫check_nrpe,后面的$HOSTADDRESS$參數command_line的參數用!隔開,默認被監控IP地址為host_name的node1 不進行填寫 ,而node1在/usr/local/nagios/etc/objects/hosts.cfg文件有定義(PS:同時/etc/hosts文件也要對應IP地址和域名,注意統一性),$ARG1$填寫command_name的參數check_command ? ? ? ? ? check_nrpe[!被監控IP地址]!check_cpu_customcontacts ? ? ? ? ? ? ? nagiosadmin#event_handler參數填寫commands.cfg文件中的command_nameevent_handler ? ? ? ? ? check_cpu_custom #event_handler_enabled為開啟event_handlerevent_handler_enabled 1 }
4. 配置 Grafana 數據源和儀表盤
4.1 添加 InfluxDB 數據源
-
登錄 Grafana,點擊 Configuration > Data Sources > Add data source。
-
選擇
InfluxDB
,填寫以下信息:
-
URL:
http://localhost:8086
-
Database:
nagios
-
User:
nagios_user
-
Password:
your_password
-
4.2 導入 Nagios 儀表盤模板
-
訪問 Grafana 儀表盤市場,搜索 "Nagios"。
-
選擇模板(例如 ID: 14541),下載 JSON 文件。
-
在 Grafana 中點擊 Create > Import,上傳 JSON 文件。
5. 驗證數據流
5.1 檢查 InfluxDB 數據
influx -database nagios -execute "SHOW MEASUREMENTS"
5.2 手動觸發 Nagios 檢查
/usr/local/nagios/libexec/check_nrpe -H node1 -c check_cpu_custom
6. 防火墻配置
# 開放 InfluxDB 和 Grafana 端口 sudo firewall-cmd --permanent --add-port=8086/tcp ? # InfluxDB sudo firewall-cmd --permanent --add-port=3000/tcp ? # Grafana sudo firewall-cmd --reload