Zabbix企業分散式監控工具

Lucky_Tomato 發表於 2021-06-05

前言:在工作中常常需要對伺服器進行監控,但是要選擇一款合適監控軟體可不容易,今天介紹下zabbix這款監控軟體

一、Zabbix介紹
1.Zabbix是一個企業級的、開源的、分散式的監控套件
2.Zabbix可以監控網路和服務的監控狀況.Zabbix利用靈活的告警機制,允許使用者對事件傳送基於Email的告警.
這樣可以保證快速的對問題作出相應. Zabbix可以利用儲存資料提供傑出的報告及圖形化方式. 這一特性將幫助使用者完成容量規劃。
3.Zabbix 支援 polling和trapping兩種方式. 所有的 Zabbix報告都可以通過配置引數在WEB前端進行訪問.
Web前端將幫助你在任何區域都能夠迅速獲得你的網路及服務狀況. Zabbix 可以通過儘可能的配置來扮演監控你的IT基礎框架的角色,
而不管你是來自於小型組織還是大規模的公司.
4.Zabbix是零成本的. 因為 Zabbix 編寫和釋出基於 GPL V2 協議. 意味著原始碼是免費釋出的
5.Zabbix公司也提供商業化的技術支援

二、Zabbix特性
1.資料收集
a.可用性及效能檢測
b.支援SNMP(trapping及polling)、IPMI-(智慧平臺管理介面,定義了嵌入式管理子系統進行通訊的特定方法)、JMX監控-(是一個為應用程式、裝置、系統等植入管理功能的框架)
c.自定義檢測
b.自定義間隔收集資料
e.server/porxy/agents

2.靈活的閥值定義
a.允許靈活地自定義問題閥值,Zabbix中稱為觸發器(trigger),儲存在後端資料庫中。

3.高階告警配置
a)可以自定義告警升級(escalation)、接收者及告警方式
b)告警資訊可以配置並允許使用巨集變數,讓zabbix更加靈活
c)通過遠端命令實行自動化動作(action)

4.實時繪圖
a)通過內建的繪圖方法實現監控資料實時繪圖

5.擴充套件的圖形化顯示
b)允許自定義建立多監控項檢視
c)網路拓撲
d)自定義的皮膚(screen)和slide shows,並允許在dashboard頁面顯示
e)報告
f)高等級(商業)監控資源

6.歷史資料儲存
a)資料儲存在資料庫中
b)歷史資料可配置
c)內建資料清理機制

7.配置簡單
a)主機通過新增監控裝置方式新增
b)一次配置,終生監控(除非調整或刪除)
c)監控裝置允許使用模板

8.模板使用
a)模板中可以新增組監控
b)模板允許繼承

9.網路自動發現
a)自動發現網路裝置
b)agent自動註冊
c)自動發現檔案系統、網路卡裝置、SNMP OID(物件識別符號)等

10.快速的web介面
a)web前端採用php編寫
b)訪問無障礙
c)你想怎麼做就能做
d)審計日誌

11.Zabbix API
a)Zabbix API提供程式級別的訪問介面,第三方程式可以很快接入

12.許可權系統
b)安全的許可權認證
c)使用者可以限制執行維護的列表

13.全特性、agent易擴充套件
a)在監控目標上部署
b)支援Linux及window

14.二進位制守護程式
a)C開發,高效能,低記憶體
b)易移植

15.具備應對負責環境情況
a)通過Zabbix proxy可以非常容易的建立遠端監控

三、Zabbix程式構成
預設情況下 zabbix 包含 5 個程式: zabbix_agentd、 zabbix_get、 zabbix_proxy、 zabbix_sender、
zabbix_server,另外 zabbix_java_gateway
1.zabbix_agentd
客戶端守護程式,收集客戶端資料,例如 cpu 負載、記憶體、硬碟使用情況等
2.zabbix_get
zabbix工具,單獨使用的命令,通常在 server 或者 proxy 端執行, 使用者獲取被監控端資料, 通常用於排錯。
例如在 server 端獲取不到客戶端的記憶體資料,我們可以使用 zabbix_get 獲取客戶端的內容的方式來做故障排查
3.zabbix_sender
zabbix工具,用於傳送資料給 server 或者 proxy,通常用於耗時比較長的 check,並且與 trapper 配合使用。 生
存環境中,個別非常耗時間 check 經常導致 zabbix 超時。於是我們在指令碼執行完畢之後,使用 sender 主動提交資料
4.zabbix_server
zabbix服務端守護程式。zabbix_agentd、 zabbix_get、 zabbix_sender、 zabbix_proxy、 zabbix_java_gateway 的數
據最終都是提交到 server
備註:當然不是資料都是主動提交給 zabbix_server,大多數情況下都是 server 主動去取資料。
5.zabbix_proxy
zabbix代理守護程式。功能類似server,唯一不同的是它只是一箇中轉站,它需要把收集到的資料提交/被提交到server裡。
一般跨機房、地區的環境需要用到proxy。
6.zabbix_java_gateway
zabbix2.0 之後引入的一個功能。顧名思義: Java 閘道器,類似 agentd,但是隻用於 Java 方面。
需要特別注意的是,它只能主動去獲取資料,而不能被動獲取資料。它的資料最終會給到 server 或者 proxy。

四、Zabbix安裝

安裝Zabbix前需要搭建LNMP環境

4.1、安裝Nginx
1.建立使用者

useradd -M -s /sbin/nologin nginx

2.進入/usr/local/src目錄,建立/usr/local/nginx目錄

cd /usr/local/src
mkdir /usr/local/nginx

3.解壓nginx原始碼包

tar xf nginx-1.10.3.tar.gz 

4.安裝前的準備,安裝pcre和openssl,支援rewrite和https  

yum install pcre* openssl* -y

5.編譯nginx

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module --with-pcre
make && make install

6.啟動Nginx 

/usr/local/nginx/sbin/nginx 
訪問測試一下
[[email protected] nginx]# curl -I http://localhost 
HTTP/1.1 200 OK
Server: nginx/1.10.3
Date: Wed, 22 Mar 2017 16:41:22 GMT

7.新增環境變數  

vim /etc/profile.d/nginx.sh
export PATH=/usr/local/nginx/sbin:$PATH
source /etc/profile.d/nginx.sh 

4.2、安裝MySQL服務  

1.建立使用者

useradd mysql -M -s /sbin/nolgoin 

2.進入目錄,解壓mysql二進位制包  

cd /usr/local/
tar xf mysql-5.5.54-linux2.6-x86_64.tar.gz

3.生成配置檔案和開機指令碼 

cd mysql-5.5.54-linux2.6-x86_64/support-files/
cp my-small.cnf /etc/my.cnf
cp mysql.server /etc/init.d/mysqld

4.編輯/etc/init.d/mysqld檔案  

cat /etc/init.d/mysqld | grep -E "^basedir=|^datadir="
basedir=/usr/local/mysql		#原始目錄
datadir=/usr/local/mysql/data		#資料目錄
chmod 755 /etc/init.d/mysqld 

5.做一個軟連結  

ln -s mysql-5.5.54-linux2.6-x86_64/ mysql  

6.修改許可權,為了生成初始化資料庫

chown mysql.mysql -R /usr/local/mysql

7.初始化資料庫  

cd /usr/local/mysql/scripts/
./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
WARNING: The host 'lnmp' could not be looked up with resolveip.
This probably means that your libc libraries are not 100 % compatible
with this binary MySQL version. The MySQL daemon, mysqld, should work
normally with the exception that host name resolving will not work.
This means that you should use IP addresses instead of hostnames
when specifying MySQL privileges !
Installing MySQL system tables...
170323  1:12:30 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
170323  1:12:30 [Note] /usr/local/mysql/bin/mysqld (mysqld 5.5.54) starting as process 5104 ...
OK
Filling help tables...
170323  1:12:30 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.
170323  1:12:30 [Note] /usr/local/mysql/bin/mysqld (mysqld 5.5.54) starting as process 5111 ...
OK

8.啟動資料庫

/etc/init.d/mysqld start
. SUCCESS! 

9.新增環境變數  

vim /etc/profile.d/mysql.sh 
export PATH=/usr/local/mysql/bin:$PATH
source /etc/profile.d/mysql.sh 

10.新增資料庫密碼

mysqladmin -uroot password '123456'

11.登入測試  

終端命令:mysql -p123456
結果輸出: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.5.54 MySQL Community Server (GPL) Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>

4.3、安裝PHP

1.安裝依賴  

yum install gcc make gd-devel libjpeg-devel libpng-devel libxml2-devel bzip2-devel libcurl-devel -y

2.建立目錄

mkdir /usr/local/php

3.解壓編譯安裝PHP

cd /usr/local/ && tar xf php-5.5.38.tar.gz
cd php-5.5.38/
/configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc --with-bz2 --with-curl \
--enable-ftp --enable-sockets --disable-ipv6 --with-gd --with-jpeg-dir=/usr/local --with-fpm-user=nginx --with-fpm-group=nginx \
--with-png-dir=/usr/local --with-freetype-dir=/usr/local --enable-gd-native-ttf --enable-soap --enable-static \
--with-iconv-dir=/usr/local --enable-mbstring --enable-calendar --with-gettext --with-mhash --enable-pcntl \
--with-libxml-dir=/usr/local --with-zlib --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --enable-inline-optimization \
--with-mysql=mysqlnd --enable-fpm --with-libdir=lib64 --enable-bcmath  --enable-shmop --enable-sysvsem 
make && make install

4.安裝成功後配置php,在php.ini配置檔案新增內容

cd /usr/local/php-5.5.38 
cp php.ini-production /usr/local/php/etc/php.ini
cp php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

5.安全優化  

vim /usr/local/php/etc/php.ini
expose_php = Off		#關閉版本資訊
display_errors = Off		#錯誤資訊控制,測試的時候開啟
log_errors = On			#開啟錯誤日誌
error_log = /usr/local/php/log/php_errors.log	#log日誌路徑,log_errors必須開啟
allow_url_fopen = Off		#開啟遠端(禁止)
cgi.fix_pathinfo=0		#防止nginx檔案型別錯誤解析漏洞
max_execution_time = 300	#單個指令碼最大執行時間,單位是秒
memory_limit = 128M		#單個指令碼最大使用的記憶體,單位為K或M
post_max_size = 16M			
upload_max_filesize = 2M	#上傳檔案最大許可2M
max_input_time = 300		#單個指令碼等待輸入最長時間
date.timezone = 'Asia/Shanghai'	#時間區域

6.啟動php-fpm  

cd /usr/local/php-5.5.38/
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod 755 /etc/init.d/php-fpm 
chkconfig php-fpm on
service php-fpm start
Starting php-fpm  done

檢視埠

netstat -tpunl | grep php
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      125593/php-fpm  

7.設定環境變數

cd /etc/profile.d/
[[email protected] profile.d]# vim php.sh
[[email protected] profile.d]# cat php.sh 
export PATH=/usr/local/php/sbin:$PATH
[[email protected] profile.d]# source php.sh

8.結合nginx連線php 新增php檔案

[[email protected] html]# vim /usr/local/nginx/html/index.php
[[email protected] html]# cat index.php 
<?php
   phpinfo();
 ?>

9.配置nginx配置檔案

cd /usr/local/nginx/conf
grep -vE "(#|^$)" nginx.conf.default > nginx.conf
vim nginx.conf
在http標籤下輸入以下內容
server {
    listen  80;
    server_name www.test.com;
    index index.php
    root html;
    location ~ .*\.(php|php5)?$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        include        fastcgi.conf;
	}
}

10.重啟nginx服務

nginx -s reload

瀏覽器訪問是否處理php頁面,如果有就成功了

4.4正式安裝zabbix

確保以下引數選項

1.資料庫要在my.cnf新增的選項

character-set-server=utf8     #設定字符集為utf8
innodb_file_per_table=1        #讓innodb的每個表檔案單獨儲存

2.PHP配置引數,php.ini配置檔案

max_execution_time = 300
memory_limit = 128M
post_max_size = 16M
upload_max_filesize = 2M
max_input_time = 300
date.timezone = 'Asia/Shanghai'

3.安裝所需的依賴包

yum install net-snmp-devel.x86_64 mysql-devel 

4.做一個軟體接

ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/
/sbin/ldconfig

5.建立zabbix編譯時指定目錄

mkdir /usr/local/zabbix

6.解壓zabbix原始碼包,並且編譯安裝

cdt /usr/local/ && tar xf zabbix-3.2.4.tar.gz
cd zabbix-3.2.4/
./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql=/usr/local/mysql/bin/mysql_config --with-net-snmp --with-libcurl --with-libxml2 
引數說明 
―prefix=/usr/local/zabbix 為指定安裝目錄為/usr/local/zabbix
―enable-server 為安裝zabbix服務端程式 
―enable-agent 為安裝agent程式 
―with-mysql 為使用mysql資料庫 
―with-net-snmp 為啟用snmp支援 
―with-libcurl 為啟用curl 
―with-libxml2 編譯xml模組,主要用於監控vm虛擬機器
[[email protected] zabbix-3.2.4]#make
[[email protected] zabbix-3.2.4]#make install
***********************************************************
*            Now run 'make install'                       *
*                                                         *
*            Thank you for using Zabbix!                  *
*                                  *
***********************************************************

7.建立zabbix使用者  

groupadd zabbix
useradd -g zabbix zabbix
id zabbix
uid=502(zabbix) gid=502(zabbix) groups=502(zabbix)
chown -R zabbix:zabbix /usr/local/zabbix/ 
mkdir -p /var/log/zabbix-server 
mkdir -p /var/log/zabbix-agentd 
chown -R zabbix:zabbix /var/log/zabbix-server/ 
chown -R zabbix:zabbix /var/log/zabbix-agentd/ 

8.初始化zabbix資料庫
zabbix server 與 proxy 需要資料庫, angent 不需要。尤其要注意的是proxy只需要匯入1個sql檔案,而server一共要匯入3個sql 檔案。
我當時在搭建 proxy 的時候匯入了3個sql,導致出現報錯。後來才發現 proxy 只需要匯入1個表結構即可。
建立zabbix資料庫,和zabbix使用者

mysql> create database zabbix character set utf8;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on zabbix.* to 'zabbix'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

9.進入zabbix-3.2.4的原始碼目錄,按順序匯入三個SQL指令碼匯入zabbix庫

cd /usr/local/zabbix-3.2.4/
mysql -uzabbix -p'123456' -hlocalhost zabbix < database/mysql/schema.sql 
mysql -uzabbix -p'123456' -hlocalhost zabbix < database/mysql/images.sql 
mysql -uzabbix -p'123456' -hlocalhost zabbix < database/mysql/data.sql 

10.修改zabbix.conf

vim /usr/local/zabbix/etc/zabbix_server.conf

DBName=zabbix  資料庫名字
DBUser=zabbix  資料庫使用者
DBPassword=123456  zabbix密碼
DBHost=localhost   主機
PidFile=/tmp/zabbix_server.pid
DBSocket=/tmp/mysql.sock

11.zabbix3.2.4的啟動

拷貝zabbix_server,zabbix_agentd檔案
cp /usr/local/zabbix-3.2.4/misc/init.d/fedora/core/zabbix_server /etc/init.d/zabbix_server
cp /usr/local/zabbix-3.2.4/misc/init.d/fedora/core/zabbix_agentd /etc/init.d/zabbix_agentd
修改zabbix_server,zabbix_agentd檔案
vim /etc/init.d/zabbix_server
BASEDIR=/usr/local/zabbix
vim /etc/init.d/zabbix_agentd
BASEDIR=/usr/local/zabbix
啟動
/etc/init.d/zabbix_server start
/etc/init.d/zabbix_agentd start

12.新增環境變數和開機自啟動

cd /etc/profile.d/
vim zabbix.sh 
export PATH=/usr/local/zabbix/sbin:$PATH
source /etc/profile.d/zabbix.sh 
chkconfig --add zabbix_server
chkconfig zabbix_server on

13.拷貝zabbix的web環境檔案

cd /usr/local/zabbix-3.2.4/frontends/
cp -rf php /usr/local/nginx/html/zabbix

確保前面都沒問題,開啟瀏覽器訪問http://url/zabbix

Zabbix企業分散式監控工具

 

 

 

 Zabbix企業分散式監控工具

 

 

 Zabbix企業分散式監控工具

 

 

 

Zabbix企業分散式監控工具

 

 

 

如果這一步有問題,chdmo 777 /usr/local/nginx/html/zabbix/conf/,因為要生成zabbix.conf.php檔案

預設用admin使用者登入,密碼為zabbix

Zabbix企業分散式監控工具

這是效果圖,可以根據自己的需求來調整zabbix

 

 

Zabbix企業分散式監控工具