0%

企业级应用——监控(一)zabbix的部署

  常见的开源监控软件有: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安装包里。
    1
    2
    3
    4
    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用户,并授权

1
2
3
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账号登录数据库。

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

  确保可以登陆之后,导入数据库表结构

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

  此时在登入数据库服务器,使用命令查询,可以看到已经生成了很多表

1
mysql> show tables from zabbix_server;

  然后编辑zabbix配置文件

1
vim /etc/zabbix/zabbix_server.conf

  修改数据库相关信息,其他的可以不做修改。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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服务。

1
systemctl restart zabbix-server zabbix-agent apache2

  此时访问zabbix-server主机对应的IP或者域名,加上路径zabbix/setup.php就可以访问zabbix的web界面进行检查配置了。
在环境检查时,可能会有一项报错,提示PHP option date.timezone检查unkown。虽然不影响服务启动,不过我们最好还是将他解决掉。

1
vim /etc/zabbix/apache.conf

  搜索timezone,将值改为php_value date.timezone Asia/Shanghai。注意,有两个timezone设置,分别是针对PHP5.版本和PHP7.版本,我们修改7版本的就可以了,也可以都修改。然后重启服务。

1
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版本为例

1
2
3
4
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用户组。

1
2
groupadd -g 1111 zabbix #创建zabbix用户和组
useradd -u 1111 -g 1111 zabbix

  安装相关依赖的安装包
  CentOS:

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

  Ubuntu:

1
2
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

  然后就可以编译并安装了。

1
2
3
4
./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、安装简体中文语言环境

1
apt-get install language-pack-zh*

  2、增加中文语言环境变量

1
2
3
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、重新设置本地配置

1
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
  可以看到里面已经有一个字体文件了的(虽然是个软链接)。

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

  将我们准备好的ttf文件拷贝至此目录,修改zabbix环境变量配置文件(apt安装路径为/usr/share/zabbix/include/defines.inc.php)

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

  搜索替换graphfont为我们期望的字体名称。一共有两处。都替换了即可。

1
2
3
4
5
#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不兼容问题,会提示报错:

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

  确认下zabbix-server的版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 //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数据库中,新建一个库,并创建对应权限用户。

1
2
3
4
5
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:

1
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:

1
2
3
4
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)

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

  修改配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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安装包。流程与之前一样。

1
apt install zabbix-agent

  修改配置文件,主要需要设置ServerServerActive,其他保持默认就可以了。Server是控制允许哪个主机可以从本机上拉取数据,一般把server端和paroxy端都写上,方便修改(,其实只写proxy端ip就可以了),ServerActive是设置向哪个主机请求主动监控配置的,如果打算使用被动模式,则可不进行设置此项,而且设置了也不会生效。

1
2
3
4
5
6
7
8
9
10
11
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服务,是配置生效

1
systemctl restart zabbix-agent

配置监控

  之前的一系列操作,只是完成了一个服务基础,之后的操作才是重点,也就是配置监控。
  进入zabbix的web管理界面,可以看到有很多项目,我们选择配置——主机——创建主机,来添加我们的监控对象。
创建主机
  在创建主机界面,需要选择一个模版,也就是监控规则,因为我们还没有创建模版,所以可以使用系统自带的模版,可以搜索linux使用自带的一些监控项。
  需要注意的是,agent使用工作模式到底是主动模式还是被动模式,就在于监控项的类型是主动还是被动模式。系统默认模版都是被动式的,如果想使用主动式,可以批量修改模版监控项(模版的具体介绍会在之后文章介绍)。
在这里插入图片描述
在这里插入图片描述
  而且,agent端使用的主动式或者被动式方式,与proxy设置的主动模式还是被动模式没有关系。proxy创建时选择的模式要与proxy配置文件一致,而这个设定只是控制proxy与server之间的关系,而真正控制agent工作模式的就在于这个监控项目的设置了。也就是说如果监控项目都是被动式,ServerActive设不设置都不会生效,如果有一部分项目是主动式,若没有设置正确的ServerActive,则这些项目将会获取不到数据了。
  至此,对于zabbix的初步配置就生效了,等一下就可以看到添加的主机都显示绿色的可用状态。
在这里插入图片描述  之后就可以在图形界面看到图形数据了。

------------------------------- The End -------------------------------
It's very nice of you to support me.