1. 程式人生 > >Linux監控系統之Zabbix

Linux監控系統之Zabbix

clu cor dbn 亂碼 安全設置 機器 flush 啟動 17.

Linux監控系統之Zabbix

Zabbix介紹

Zabbix是由  Zabbix 是由 Alexei Vladishev 開發的一種網絡監視、管理系統,基於 Server-Client 架構。可用於監視各種網絡服務、服務器和網絡機器等狀態。整合了Catic和Nagios的特性。

  使用各種 Database-end 如 MySQL, PostgreSQL, SQLite, Oracle 或 IBM DB2 儲存資料。Server 端基於 C語言、Web 管理端 frontend 則是基於 PHP 所制作的。Zabbix 可以使用多種方式監視。可以只使用 Simple Check 不需要安裝 Client 端,亦可基於 SMTP 或 HTTP ... 各種協定做監視。

  在客戶端如 UNIX, Windows 中安裝 Zabbix Agent 之後,可監視 CPU Load、網絡使用狀況、硬盤容量等各種狀態。而就算沒有安裝 Agent 在監視對象中,Zabbix 也可以經由 SNMP、TCP、ICMP、利用 IPMI、SSH、telnet 對目標進行監視。

Zabbix原理

一個監控系統運行的大概的流程是這樣的:
zabbix agent需要安裝到被監控的主機上,它負責定期收集各項數據,並發送到zabbix server端,zabbix server將數據存儲到數據庫中,zabbix web根據數據在前端進行展現和繪圖。這裏agent收集數據分為主動和被動兩種模式:

主動:agent請求server獲取主動的監控項列表,並主動將監控項內需要檢測的數據提交給server/proxy
被動:server向agent請求獲取監控項的數據,agent返回數據。

Zabbix組件

zabbix由以下幾個組件部分構成:
1、Zabbix Server:負責接收agent發送的報告信息的核心組件,所有配置,統計數據及操作數據均由其組織進行;

2、Database Storage:專用於存儲所有配置信息,以及由zabbix收集的數據;

3、Web interface:zabbix的GUI接口,通常與Server運行在同一臺主機上;

4、Proxy:可選組件,常用於分布監控環境中,代理Server收集部分被監控端的監控數據並統一發往Server端;

5、Agent:部署在被監控主機上,負責收集本地數據並發往Server端或Proxy端;

Zabbix原理圖

技術分享圖片

試驗環境

角色 IP地址
zabbix-server 192.168.58.149
zabbix-client 192.168.58.157

Zabbix安裝

首先搭建LAMP環境,我這裏選擇的是使用YUM倉庫安裝。

[root@promote ~]# yum install -y > httpd > mariadb-server mariadb > php > php-mysql > php-gd > libjpeg* > php-ldap > php-odbc > php-pear > php-xml > php-xmlrpc > php-mhash

安裝好lamp架構後,修改httpd.conf配置文件。

[root@promote ~]# vim /etc/httpd/conf/httpd.conf 

<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

修改php的配置文件php.ini修改時區,否則會報錯。

[root@promote ~]# vim /etc/php.ini 

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = PRC  #修改為中國時區、

關閉防火墻和SELinux功能。

[root@promote ~]# systemctl stop firewalld.service
[root@promote ~]# setenforce 0

開啟httpd和mariadb服務,進行配置。

[root@promote ~]# systemctl start httpd.service
[root@promote ~]# systemctl start mariadb.service
[root@promote ~]# netstat -ntap | egrep ‘(80|3306)‘
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      68787/mysqld        
tcp6       0      0 :::80                   :::*                    LISTEN      67276/httpd
#可以看到80和3306端口已經開啟

下面可以對mariadb進行一些安全設置。

[root@promote ~]# mysql_secure_installation
#可以根據自己情況選擇對應的設置

編寫php測試頁面,進行測試。

[root@promote ~]# vim /var/www/html/index.php

<?php
phpinfo();
?>

訪問http://192.168.58.149/index.php,容易過訪問到下面界面說明LAMP搭建成功。
技術分享圖片
進入數據庫創建給zabbix儲存數據的數據庫,已經賦予相關權限。

[root@promote ~]# mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 6
Server version: 5.5.60-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.
MariaDB [(none)]> CREATE DATABASE zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
#創建一個叫zabbix的數據庫,默認字符集為utf-8
MariaDB [(none)]> GRANT all privileges ON *.* TO ‘zabbix‘@‘%‘ IDENTIFIED BY ‘admin123‘;
Query OK, 0 rows affected (0.00 sec)
#賦予權限
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
#刷新權限

下面編寫數據庫測試登錄頁面。

[root@promote ~]# vim /var/www/html/index.php

<?php
$link=mysql_connect(‘192.168.58.149‘,‘zabbix‘,‘admin123‘);
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
mysql_close();
?>

再來訪問http://192.168.58.149/index.php,可以看到fail,這裏原因是在數據庫中有空用戶的存在。
技術分享圖片

[root@promote ~]# mysql -u root -p
Enter password: 

MariaDB [(none)]> select user,host from mysql.user;
+--------+-------------------------+
| user   | host                    |
+--------+-------------------------+
| zabbix | %                       |
| root   | 127.0.0.1               |
| root   | ::1                     |
|        | localhost               |
| root   | localhost               |
|        | promote.cache-dns.local |
| root   | promote.cache-dns.local |
+--------+-------------------------+
7 rows in set (0.00 sec)
#可以看到有兩個空用戶,我們將這兩個空用戶刪除。
MariaDB [(none)]> drop user ‘‘@localhost;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]> drop user ‘‘@‘promote.cache-dns.local‘;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> select user,host from mysql.user;
+--------+-------------------------+
| user   | host                    |
+--------+-------------------------+
| zabbix | %                       |
| root   | 127.0.0.1               |
| root   | ::1                     |
| root   | localhost               |
| root   | promote.cache-dns.local |
+--------+-------------------------+
5 rows in set (0.00 sec)

然後我們再來訪問http://192.168.58.149/index.php,可以看到訪問成功。
技術分享圖片
下面安裝Zabbix Server,首先安裝相關依賴包。

[root@promote ~]# yum install php-bcmath php-mbstring -y

下載zabbix的yum源。

[root@promote ~]# rpm -ivh http://repo.zabbix.com/zabbix/3.5/rhel/7/x86_64/zabbix-release-3.5-1.el7.noarch.rpm
[root@promote ~]# ls /etc/yum.repos.d/
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo
CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo  zabbix.repo
#可以看到自動生成了zabbix.repo文件。

安裝zabbix-server相關軟件包。

[root@promote ~]# yum install zabbix-server-mysql zabbix-web-mysql -y

在數據庫中生成zabbix的數據庫文件。

[root@promote ~]# zcat /usr/share/doc/zabbix-server-mysql-4.0.0/create.sql.gz | mysql -uzabbix -p  zabbix 
Enter password: 
#註意這裏是使用zabbix用戶和密碼登錄的。

我們查看zabbix-server的配置文件並使用正則表達式進行過濾。

[root@promote ~]# grep -n ‘^[a-Z]‘ /etc/zabbix/zabbix_server.conf 
38:LogFile=/var/log/zabbix/zabbix_server.log
49:LogFileSize=0
72:PidFile=/var/run/zabbix/zabbix_server.pid
82:SocketDir=/var/run/zabbix
101:DBName=zabbix
117:DBUser=zabbix
356:SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
474:Timeout=4
517:AlertScriptsPath=/usr/lib/zabbix/alertscripts
528:ExternalScripts=/usr/lib/zabbix/externalscripts
564:LogSlowQueries=3000

這裏我們只要插入一行DBPassword=admin123.

[root@promote ~]# sed -i ‘127aDBPassword=admin123‘ /etc/zabbix/zabbix_server.conf 
[root@promote ~]# grep -n ‘^[a-Z]‘ /etc/zabbix/zabbix_server.conf 
38:LogFile=/var/log/zabbix/zabbix_server.log
49:LogFileSize=0
72:PidFile=/var/run/zabbix/zabbix_server.pid
82:SocketDir=/var/run/zabbix
101:DBName=zabbix
117:DBUser=zabbix
128:DBPassword=admin123
357:SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
475:Timeout=4
518:AlertScriptsPath=/usr/lib/zabbix/alertscripts
529:ExternalScripts=/usr/lib/zabbix/externalscripts
565:LogSlowQueries=3000

將httpd服務中zabbix用戶的zabbix.conf中的時區改為Asia/Shanghai。

[root@promote ~]# vim /etc/httpd/conf.d/zabbix.conf 
   <IfModule mod_php5.c>
        php_value max_execution_time 300
        php_value memory_limit 128M
        php_value post_max_size 16M
        php_value upload_max_filesize 2M
        php_value max_input_time 300
        php_value always_populate_raw_post_data -1
        php_value date.timezone Asia/Shanghai
    </IfModule>

下面主要是解決安裝好zabbix後,網頁顯示會用亂碼的問題,首先將配置文件中的字體都改為kaiti。

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

define(‘ZBX_FONT_NAME‘, ‘graphfont‘);
#這是默認字體

[root@promote ~]# sed -i ‘s/graphfont/kaiti/g‘ /usr/share/zabbix/include/defines.inc.php 
[root@promote ~]# sed -n ‘/graphfont/p‘ /usr/share/zabbix/include/defines.inc.php 
#可以看到所有的都替換為了kaiti
[root@promote ~]# cp STKAITI.TTF /usr/share/zabbix/fonts/
#將字體文件復制到zabbix的字體目錄中

啟動zabbix-server服務。

[root@promote ~]# systemctl enable zabbix-server
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-server.service to /usr/lib/systemd/system/zabbix-server.service.
[root@promote ~]# systemctl start zabbix-server
[root@promote ~]# netstat -anpt | grep zabbix 
tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      93906/zabbi_server 
tcp6       0      0 :::10051                :::*                    LISTEN      93906/zabbi
#可以看到zabbix服務已經開啟,相對應的端口已經打開

重啟httpd服務。

[root@promote ~]# systemctl restart httpd.service

訪問http://192.168.58.149/zabbix/
技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片
配置完服務端後,下面配置客戶端,也就是需要被監控的客戶機端。首先,配置zabbix的yum源。

[root@www1 ~]# rpm -ivh http://repo.zabbix.com/zabbix/3.5/rhel/7/x86_64/zabbix-release-3.5-1.el7.noarch.rpm
[root@www1 ~]# yum install -y zabbix-agent

下面修改zabbix_agentd.conf配置文件

[root@www1 ~]# grep -n ‘^‘[a-Z] /etc/zabbix/zabbix_agentd.conf
13:PidFile=/var/run/zabbix/zabbix_agentd.pid
32:LogFile=/var/log/zabbix/zabbix_agentd.log
43:LogFileSize=0
98:Server=127.0.0.1
139:ServerActive=127.0.0.1
150:Hostname=Zabbix server
268:Include=/etc/zabbix/zabbix_agentd.d/*.conf

主要修改下面幾行

Server=192.168.58.149
ServerActive=192.168.58.149
Hostname=Zabbix1    #這個隨意更改

關閉防火墻和SELinux功能

[root@www1 ~]# systemctl stop firewalld.service
[root@www1 ~]# setenforce 0

啟用zabbix-agent功能。

[root@www1 ~]# systemctl enable zabbix-agent.service
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-agent.service to /usr/lib/systemd/system/zabbix-agent.service.
[root@www1 ~]# systemctl restart zabbix-agent.service
[root@www1 ~]# netstat -anpt | grep zabbix
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      4936/zabbix_agentd  
tcp6       0      0 :::10050                :::*                    LISTEN      4936/zabbix_agentd 
#可以看到監聽端口10050已經開啟

下面需要在zabbix檢測網頁上添加被監控主機。
技術分享圖片
技術分享圖片
技術分享圖片
技術分享圖片
最後我們測試,關閉被監控主機的ssh服務,查看是否會有報警。

[root@www1 ~]# systemctl stop sshd.service

技術分享圖片

Linux監控系統之Zabbix