企業級應用——監控(一):zabbix的部署

本文首發於我的個人網站: https://hewanyue.com/
本文作者: Hechao
本文鏈接: https://hewanyue.com/blog/366b680c.html

  常見的開源監控軟件有:cacti、nagios、zabbix、smokeping、open-falcon等,本文主要介紹目前使用較多的開源監控軟件zabbix,針對容器環境的開源監控軟件Prometheus下次再講解。
  zabbix功能強大,可橫向擴展、自定義監控項、支持多種監控方式、可監控網絡與服務等。

zabbix功能簡述

  • 數據採集
    zabbix是週期性採集時序數據。
      採集對象可以有:服務器、路由器、交換機、存儲、防火牆、IP、PORT、URL、自定義監控對象…
      採集目標:監控項,指標數據(metrics data)
      數據採集方式:zabbix-server,zabbix-proxy,zabbix-agent
      按照有無代理分類:
        Agentless:SNMP,Telnet,ssh, IPMI, JMX,
        Agent:zabbix agent
  • 數據存儲
    可以儲存歷史數據和局勢數據,還有閾值。
      歷史數據: 每個監控項採集到的每個監控值
      趨勢數據: 趨勢表裏主要保留某個監控項一個小時內歷史數據的最大值、最小值和平均值以及該監控項一個小時內所採集到的數據個數。
      閾值:可按照預定義的閾值等級實現分層報警
    支持的數據庫類型有:
      SQL: MySQL/MariaDB(Zabbix)
      NoSQL:Redis(Open-falcon)
      rrd: Round Robin Database(Cacti)
  • 數據展示
    可以使用原生的zabbix web界面可以展示graph -> screen -> slideshow(將多個screen以幻燈片的方式進行輪流展示)
    還支持以zabbix爲數據源,在grafana展示更絢麗的界面。
  • 報警通知
    支持email,短信,微信,語音等多種方式報警通知,也可以實現故障自治癒。
    host (host groups) <- templates #從模板繼承告警配置
    host -> items -> triggers -> action (條件-conditions, 操作-operations) #自定義告警配置

zabbix架構

  在zabbix服務中,一般都包含有zabbix-serverzabbix-agentzabbix-proxy,及數據庫,結構如下圖所示:
zabbix結構示意圖
  一般都需要在被監控端安裝zabbix-agent服務來抓取數據,然後彙總到zabbix-server 端來展示分析監控報警,如果agent過多或者可能不同機房的數據,可以通過zabbix-proxy來暫存收集數據,之後在彙總至zabbix-server端,所以zabbix-proxy端及zabbix-server 端都需要一個mysql數據庫來儲存即時及歷史監控數據的(zabbix-proxy處臨時儲存)。而且整個體系中最重要的就是數據庫了,數據都在數據庫中,只要數據庫中的數據不丟失,重建一個zabbix監控架構還是比較容易的,所以可以對數據庫做主從複製高可用,可參見之前文章

zabbix部署

zabbix server

包管理工具安裝

  我們先來搭建zabbix-server端。
  對於Ubuntu系統:
  先下載配置鏡像倉庫,並apt安裝zabbix-server-mysqlzabbix-frontend-phpzabbix-agent,其中zabbix-server的二進制程序及啓動配置文件都在在zabbix-server-mysql安裝包裏。

 wget https://repo.zabbix.com/zabbix/4.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.0-3%2Bbionic_all.deb
 dpkg -i zabbix-release_4.0-3+bionic_all.deb
 apt update
 apt -y install zabbix-server-mysql zabbix-frontend-php zabbix-agent

  然後開始安裝zabbix-server的數據庫。可以與zabbix-server複用一臺主機,也可以單獨一臺主機。我們這裏使用一臺新的主機,apt安裝好mariadb(與mysql操作一樣)。
  先以root身份登陸mysql主機,然後爲zabbix創建一個數據庫,例如zabbix_server,再創建一個zabbix用戶,並授權

MariaDB [mysql]> create database zabbix_server character set utf8 collate utf8_bin;
MariaDB [mysql]>grant all privileges on zabbix_server.* to zabbix@"192.168.32.%" identified by "zabbix";
MariaDB [mysql]>flush privileges;

  然後回到zabbix-server主機,安裝一個mysql客戶端,並測試可否用之前創建的zabbix賬號登錄數據庫。

apt mysql-client -y
mysql -uzabbix -pzabbix -h192.168.32.20

  確保可以登陸之後,導入數據庫表結構

zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -uzabbix -pzabbix -h192.168.32.20 zabbix_server

  此時在登入數據庫服務器,使用命令查詢,可以看到已經生成了很多表

mysql> show tables from zabbix_server;

  然後編輯zabbix配置文件

vim /etc/zabbix/zabbix_server.conf

  修改數據庫相關信息,其他的可以不做修改。

root@DockerUbuntu19:~# grep "^[a-Z]" /etc/zabbix/zabbix_server.conf
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=1
PidFile=/var/run/zabbix/zabbix_server.pid
SocketDir=/var/run/zabbix
DBHost=192.168.32.20
DBName=zabbix_server
DBUser=zabbix
DBPassword=zabbix
StartTrappers=10
Timeout=30
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
FpingLocation=/usr/bin/fping
Fping6Location=/usr/bin/fping6
LogSlowQueries=3000

  重啓zabbix服務。

systemctl restart zabbix-server zabbix-agent apache2

  此時訪問zabbix-server主機對應的IP或者域名,加上路徑zabbix/setup.php就可以訪問zabbix的web界面進行檢查配置了。
在環境檢查時,可能會有一項報錯,提示PHP option date.timezone檢查unkown。雖然不影響服務啓動,不過我們最好還是將他解決掉。

vim /etc/zabbix/apache.conf

  搜索timezone,將值改爲php_value date.timezone Asia/Shanghai。注意,有兩個timezone設置,分別是針對PHP5.版本和PHP7.版本,我們修改7版本的就可以了,也可以都修改。然後重啓服務。

systemctl restart zabbix-server zabbix-agent apache2

  此時,再刷新一下網頁,就可以看到所有檢查都是OK狀態了。正確填寫數據庫信息和server主機信息,點擊Finish,配置就完成了,會自動跳轉至登錄界面,默認用戶名爲Admin,默認密碼爲zabbix

編譯安裝zabbix

  源碼編譯安裝zabbix的話,先下載源碼包。
  下載路徑爲https://jaist.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/
  我們這裏以4.015版本爲例

cd /usr/local/src
wget https://jaist.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/4.0.15/zabbix-4.0.15.tar.gz
tar xf zabbix-4.0.15.tar.gz
cd zabbix-4.0.15/

  編譯安裝需要我們自己來創建zabbix用戶組。

groupadd -g 1111 zabbix #創建zabbix用戶和組
useradd -u 1111 -g 1111 zabbix

  安裝相關依賴的安裝包
  CentOS:

yum install gcc libxml2-devel libevent-devel net-snmp net-snmp-devel curl curl-devel php phpbcmath php-mbstring mariadb mariadb-devel -y

  Ubuntu:

apt update
apt-get install apache2 apache2-bin apache2-data apache2-utils fontconfig-config fonts-dejavu-core fping libapache2-mod-php libapache2-mod-php7.2 libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libfontconfig1 libgd3 libiksemel3 libjbig0 libjpeg-turbo8 libjpeg8 liblua5.2-0 libodbc1 libopenipmi0 libsensors4 libsnmp-base libsnmp30 libsodium23 libssh2-1 libtiff5 libwebp6 libxpm4 php-bcmath php-common php-gd php-ldap php-mbstring php-mysql php-xml php7.2-bcmath php7.2-cli php7.2-common php7.2-gd php7.2-json php7.2-ldap php7.2-mbstring php7.2-mysql php7.2-opcache php7.2-readline php7.2-xml snmpd ssl-cert ttf-dejavu-core libmysqlclient-dev libxml2-dev libxml2 snmp libsnmp-dev libevent-dev openjdk-8-jdk curl libcurl4-openssl-dev

  然後就可以編譯並安裝了。

./configure --prefix=/apps/zabbix_server \
--enable-server --enable-agent --with-mysql \
--with-net-snmp --with-libcurl --with-libxml2 --enable-java
make install

  之後流程就與之前一樣。

設置中文web頁面及亂碼問題

  如果Ubuntu系統安裝時爲選擇中文語言,則web界面大概率是英文界面,可能會對我們的使用有一定影響。
  點擊右上角的用戶頭像標誌,可以選擇語音。不過如果系統沒有安裝中文時,是無法選擇中文的。
在這裏插入圖片描述
  所以需要我們在ubuntu系統中安裝並設置中文簡體語言環境.。
  1、安裝簡體中文語言環境

apt-get install language-pack-zh*

  2、增加中文語言環境變量

vim /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
LANG="zh_CN.UTF-8"

  3、重新設置本地配置

dpkg-reconfigure locales

  此時刷新網頁,就可以選擇中文Chinese(zh_CN)了,點Update修改保存。此時就可以看到界面變成中文了。不過這時,在圖形等界面,大概率會出現字符無法顯示的亂碼情況,這是由於當前系統有些監控項部分顯示有亂碼,使由於web界面顯示爲中文但是系統沒有相關字體支持,因此需要相關字體的支持才能正常顯示。這時需要我們自己配置一個字體並修改zabbix的font設置。
  可以去網上下載字體,也可以從windows中獲取已有字體。
  在windows中路徑爲控制面板\外觀和個性化\字體(複製至地址欄就可以找到了)
字體
  不過需要注意的是,裏面有的字體是otf格式,zabbix無法識別,要選擇ttf格式的字體纔可以。
otf
ttf
  將選好的或者下載好的ttf格式字體,拷貝至zabbix-server主機的zabbix安裝目錄下的fonts目錄裏。
  如果是ubuntu通過apt安裝,則爲/usr/share/zabbix/assets/fonts,如果是編譯安裝則可通過find命令搜索一下find /PATH(安裝路徑) -name fonts
  可以看到裏面已經有一個字體文件了的(雖然是個軟鏈接)。

root@DockerUbuntu19:~# ll /usr/share/zabbix/assets/fonts
總用量 11520
drwxr-xr-x 2 root root     4096 12月 18 18:59 ./
drwxr-xr-x 5 root root     4096 12月 18 17:43 ../
lrwxrwxrwx 1 root root       38 12月 18 17:44 graphfont.ttf -> /etc/alternatives/zabbix-frontend-font
-rw-r--r-- 1 root root 11785184 12月 18 18:59 simkai.ttf

  將我們準備好的ttf文件拷貝至此目錄,修改zabbix環境變量配置文件(apt安裝路徑爲/usr/share/zabbix/include/defines.inc.php)

cd /usr/share/zabbix/
vim include/defines.inc.php

  搜索替換graphfont爲我們期望的字體名稱。一共有兩處。都替換了即可。

#define('ZBX_GRAPH_FONT_NAME',          'graphfont'); // font file name
define('ZBX_GRAPH_FONT_NAME',           'simkai'); // font file name
- - -
#define('ZBX_FONT_NAME', 'graphfont');
define('ZBX_FONT_NAME', 'simkai');

  不需要重啓zabbix及apache,修改後的字體文件即可直接生效。
  至此zabbix-server端的配置就完成了。

zabbix proxy

zabbix proxy對比zbbbix server

功能 zabbxy proxy zabbix server
輕量級 相對重量級
圖形 帶圖形控制界面
可以獨立工作 是,可以獨立採集數據並存儲 是,即數據採集、存儲、分析、展示於一體
易維護 是,配置完成後基本無需管理 維護也不難
獨立數據庫 保留少量最近數據 保留指定時間內的所有數據
報警通知 否,代理服務器不發送郵件通知 支持郵件、短信等告警機制

zabbix proxy版本選擇

  zabbix proxy的大版本必須要和zabbix server版本一致,否則會導致出現zabbix server與zabbix proxy不兼容問題,會提示報錯:

proxy "zabbix-proxy-active" protocol version 3.2 differs from server version 4.0

  確認下zabbix-server的版本

root@DockerUbuntu19:/usr/share/zabbix/assets/fonts# zabbix_server -V
zabbix_server (Zabbix) 4.0.15
Revision 992445e02c 25 November 2019, compilation time: Nov 25 2019 09:01:31

Copyright (C) 2019 Zabbix SIA
License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it according to
the license. There is NO WARRANTY, to the extent permitted by law.

This product includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit (http://www.openssl.org/).

Compiled with OpenSSL 1.1.0g  2 Nov 2017
Running with OpenSSL 1.1.1  11 Sep 2018

  所以我們最好也安裝相同版本的zabbix-proxy。

zabbix proxy部署

  因爲proxy也需要一個數據庫,可以選擇複用server端的數據庫,或者再另外創建一個。我們這裏複用之前server端的數據庫。
  所以在之前的MariaDB數據庫中,新建一個庫,並創建對應權限用戶。

MariaDB [(none)]> create database zabbix_proxy;
Query OK, 1 row affected (0.01 sec)

MariaDB [(none)]> grant all privileges on zabbix_proxy.* to proxy@"172.18.32.%" identified by "proxy";
Query OK, 0 rows affected (0.10 sec)

  回到proxy主機,然後去官方鏡像倉庫https://repo.zabbix.com/zabbix/4.0/找到對應系統、對應版本的安裝包路徑
  CentOS:

yum install https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-proxy-mysql-4.0.15-1.el7.x86_64.rpm

  Ubuntu:

wget https://repo.zabbix.com/zabbix/4.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_4.0-3%2Bbionic_all.deb
dpkg -i zabbix-release_4.0-3+bionic_all.deb
apt update
apt install zabbix-proxy-mysql

  導入proxy的數據庫表(CentOS和Ubuntu路徑可能不同,不過名字都叫schema.sql.gz)

zcat /usr/share/doc/zabbix-proxy-mysql-4.0.15/schema.sql.gz | mysql -uproxy -pproxy -h192.168.32.20 zabbix_proxy

  修改配置文件

vim /etc/zabbix/zabbix_proxy.conf

ProxyMode=1 #0爲主動,1爲被動
Server=192.168.32.19 #zabbix server服務器的地址或主機名
Hostname=Zabbix proxy #代理服務器名稱,需要與zabbix server添加代理時候的proxyname是一致的!
ListenPort=10051 #zabbix proxy監聽端口
LogFile=/var/log/zabbix/zabbix_proxy.log
EnableRemoteCommands=1 #允許zabbix server執行遠程命令
PidFile=/var/run/zabbix/zabbix_proxy.pid
SocketDir=/var/run/zabbix
DBHost=192.168.32.20 #數據庫服務器地址
DBName=zabbix_proxy #使用的數據庫名稱
DBUser=proxy #連接數據庫的用戶名稱
DBPassword=proxy #數據庫用戶密碼
DBPort=3306 #數據庫端口
ProxyLocalBuffer=720 #已經提交到zabbix server的數據保留時間
ProxyOfflineBuffer=720 #未提交到zabbix server的時間保留時間
HeartbeatFrequency=60 #心跳間隔檢測時間,默認60秒,範圍0-3600秒,被動模式不使用
ConfigFrequency=5 #間隔多少秒從zabbix server獲取監控項信息
DataSenderFrequency=5 #數據發送時間間隔,默認爲1秒,範圍爲1-3600秒,被動模式不使用
StartPollers=20 #啓動的數據採集器數量
CacheSize=2G #保存監控項而佔用的最大內存
HistoryCacheSize=2G #保存監控歷史數據佔用的最大內存
HistoryIndexCacheSize=128M #歷史索引緩存的大小
Timeout=30 #監控項超時時間,單位爲秒
LogSlowQueries=3000 #毫秒,多久的數據庫查詢會被記錄到日誌

  然後在web界面添加proxy,主動模式是proxy端主動向server端推送數據,所以不需要填寫IP,被動模式是server端向proxy拉取數據,需要填寫proxy端IP或者域名DNS。選在主動代理或者被動代理,視情況而定,要與配置文件中相同。
在這裏插入圖片描述  至此,zabbix proxy端也就配置好了。

zabbix agent

agent工作模式

  一般來說,zabbix agent與proxy有兩種工作模式,一個是主動模式,即被監控端主動向server端或者proxy端發起請求,請求監控項列表,並按照列表的內容主動定時推送監控信息,此時agent端使用隨機端口訪問server端或者proxy端的固定端口(10051端口);另一個是被動模式,是server端或者proxy依照設定好的監控項條目,直接去agent段獲取相應的數據,此時是agent端打開固定端口(10050)等待請求。
  主動模式與被動模式中的主動與被動,是相對於agent端來說的,agent主動的就叫做主動模式,agent端被動的就叫做被動模式。

zabbix agent部署

  在被監控主機上安裝zabbix-agent安裝包。流程與之前一樣。

apt install zabbix-agent

  修改配置文件,主要需要設置ServerServerActive,其他保持默認就可以了。Server是控制允許哪個主機可以從本機上拉取數據,一般把server端和paroxy端都寫上,方便修改(,其實只寫proxy端ip就可以了),ServerActive是設置向哪個主機請求主動監控配置的,如果打算使用被動模式,則可不進行設置此項,而且設置了也不會生效。

root@DockerUbuntu21:~# grep "^[a-Z]" /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix-agent/zabbix_agentd.log
LogFileSize=1
Server=192.168.32.19,192.168.32.20
ListenPort=10050
StartAgents=4
ServerActive=127.0.0.1
Hostname=192.168.32.21
Timeout=20
Include=/etc/zabbix/zabbix_agentd.conf.d/*.conf

  重啓agent服務,是配置生效

systemctl restart zabbix-agent

配置監控

  之前的一系列操作,只是完成了一個服務基礎,之後的操作纔是重點,也就是配置監控。
  進入zabbix的web管理界面,可以看到有很多項目,我們選擇配置——主機——創建主機,來添加我們的監控對象。
創建主機
  在創建主機界面,需要選擇一個模版,也就是監控規則,因爲我們還沒有創建模版,所以可以使用系統自帶的模版,可以搜索linux使用自帶的一些監控項。
  需要注意的是,agent使用工作模式到底是主動模式還是被動模式,就在於監控項的類型是主動還是被動模式。系統默認模版都是被動式的,如果想使用主動式,可以批量修改模版監控項(模版的具體介紹會在之後文章介紹)。
在這裏插入圖片描述
在這裏插入圖片描述
  而且,agent端使用的主動式或者被動式方式,與proxy設置的主動模式還是被動模式沒有關係。proxy創建時選擇的模式要與proxy配置文件一致,而這個設定只是控制proxy與server之間的關係,而真正控制agent工作模式的就在於這個監控項目的設置了。也就是說如果監控項目都是被動式,ServerActive設不設置都不會生效,如果有一部分項目是主動式,若沒有設置正確的ServerActive,則這些項目將會獲取不到數據了。
  至此,對於zabbix的初步配置就生效了,等一下就可以看到添加的主機都顯示綠色的可用狀態。
在這裏插入圖片描述  之後就可以在圖形界面看到圖形數據了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章