zabbix监控服务部署
zabbix监控服务部署
1. zabbix介绍
Zabbix
能监控各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位、解决存在的各种问题。是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。
1.1 zabbix的组件
zabbix主要有以下功能组件组成:
官方文档:https://www.zabbix.com/documentation/4.0/zh/manual/introduction/overview
Server
Zabbix server
是 Zabbix软件的核心组件,agent 向其报告可用性、系统完整性信息和统计信息。server也是存储所有配置信息、统计信息和操作信息的核心存储库。
Agent
Zabbix agents
部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给 Zabbix server。
Proxy
Zabbix proxy
可以代替 Zabbix server采集性能和可用性数据。Zabbix proxy在Zabbix的部署是可选部分;但是proxy的部署可以很好的分担单个Zabbix server的负载。
数据库
所有配置信息以及 Zabbix 采集到的数据都被存储在数据库中。
Web 界面
该界面是 Zabbix server 的一部分,通常(但不一定)和 Zabbix server 运行在同一台物理机器上。
1.2 zabbix的进程
默认情况下 zabbix 包含6个进程:zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_sender、zabbix_server,另外一个zabbix_java_gateway是可选的,这个需要单独安装。
zabbix_agentd
客户端守护进程,此进程收集客户端数据,例如cpu负载、内存、硬盘使用情况等。
zabbix_get
zabbix 工具,单独使用的命令,通常在 server 或者 proxy 端执行获取远程客户端信息的命令。通常用于排错。例如在 server 端获取不到客户端的内存数据,可以使用 zabbix_get 获取客户端的内容的方式来做故障排查。
zabbix_sender
zabbix 工具,用于发送数据给 server 或者 proxy,通常用于耗时比较长的检查。很多检查非常耗时间,导致 zabbix 超时。于是在脚本执行完毕之后,使用 sender 主动提价数据。
zabbix_server
zabbix 服务端守护进程。zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway的数据最终都是提交到server(说明:当然不是数据都是主动提交给zabbix_server,也有的是 server 主动去取数据)
zabbix_proxy
zabbix 代理守护进程。功能类似server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交/被提交到 server 里。
zabbix_java_gateway
zabbix2.0之后引入的一个功能。顾名思义:Java网络,类似agentd,但是只用于 Java 方面。需要特别注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到 server 或者proxy。
1.3 zabbix常用术语
官方文档: https://www.zabbix.com/documentation/4.0/zh/manual/definitions
- 你想要监控的联网设备,有IP/DNS。
- 主机的逻辑组;可能包含主机和模板。一个主机组里的主机和模板之间并没有任何直接的关联。通常在给不同用户组的主机分配权限时候使用主机组。
- 你想要从主机接收的特定数据,一个度量(metrics)/指标数据。
- 存入数据库之前,转化/预处理接收到的指标数据
- 触发器是一个逻辑表达式,用来定义问题阈值和“评估”监控项接收到的数据
当接收到的数据高于阈值时,触发器从“OK”变成“Problem”状态。当接收到的数据低于阈值时,触发器保留/返回“OK”的状态。
- 发生的需要注意的事件,例如触发器状态改变、自动发现/监控代理自动注册
- 提前设置的事件标记*,可以用于事件关联,权限细化设置等。
- 自动灵活的、精确的关联问题和解决方案
比如说,你可以定义触发器A告警的异常可以由触发器B解决,触发器B可能采用完全不同的数据采集方式。
- 处在“异常”状态的触发器
- 预先定义的应对事件的动作*
一个动作由操作(例如发出通知)和条件(什么时间进行操作)组成
- 发送告警通知的方式、途径
- 通过预先设定好的媒介途径发送事件信息给用户。
- 预定义好的,满足特定条件的情况下,可以在被监控主机上自动执行的命令。
- 被应用到一个或多个主机上的一整套实体组合(如监控项,触发器,图形,聚合图形,应用,LLD,Web场景等)。
模版的应用使得主机上的监控任务部署快捷方便;也可以使监控任务的批量修改更加简单。模版是直接关联到每台单独的主机上。
- 监控项的逻辑分组
- 检查网站可浏览性的一个或多个HTTP请求
- Zabbix提供的web界面,5.0变成了ui
- 自定义的web前端模块中,用于重要的概要和可视化信息展示的单元, 我们称之为组件(widget)。
- Dashboard中用来展示某种信息和数据的可视化组件(概览、map、图表、时钟等)。
- Zabbix API允许用户使用JSON RPC协议来创建、更新和获取Zabbix对象(如主机、监控项、图表等)信息或者执行任何其他的自定义的任务
- Zabbix软件的核心进程,执行监控操作,与Zabbix proxies和Agents进行交互、触发器计算、发送告警通知;也是数据的中央存储库
- 部署在监控对象上的进程,能够主动监控本地资源和应用
- 代替Zabbix Server采集数据,从而分担Zabbix Server负载的进程
- 使用TLS(Transport Layer Security )协议*支持Zabbix组建之间的加密通讯(server, proxy, agent, zabbix_sender 和 zabbix_get工具) 。
2. zabbix工作原理
监控系统运行的大概流程是这样的:
zabbix agent 需要安装到被监控的主机上,它负责定期收集各项数据,并发送到 zabbix server 端,zabbix server 将数据存储到数据库中,zabbix web 根据数据在前端进行展示和绘图。这里 agent 收集数据分为主动和被动两种模式:
主动:agent 请求server 获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server / proxy
被动:server 向 agent 请求获取监控项的数据,agent 返回数据。
我们需要监控那些内容
硬件监控 | 温度,硬件故障等 |
---|---|
系统监控 | CPU, 内存,硬盘,网卡流量,TCP状态,进程数 |
应用监控 | Nginx. Tomcat. PHP、 MySQL、 Redis等 |
日志监控 | 系统日志服务日志访问日志错误日志 |
安全监控 | WAF,敏感文件监控 |
API监控 | 可用性,接口请求,响应时间 |
业务监控 | 例如电商网站,每分钟产生多少订单、注册多少用户、多少活跃用户、推广活动效果 |
流量分析 | 根据流量获取用户相关信息,例如用户地理位置、某页面访问状况、页面停留时间等 |
3. zabbix监控架构
在实际监控架构中,zabbix根据网络环境、监控规模等 分了三种架构:server-client、master-node-client、server-proxy-client 三种。
1、server-client
架构
zabbix的最简单的架构,监控服务器和被监控机之间不经过任何代理,直接由 zabbix server 和 zabbix agentd之间进行数据交互。适用于网络比较简单,设备比较少的监控环境。
2、server-proxy-client
架构
其中 proxy 是server、client 之间沟通的一个桥梁,proxy 本身没有前端,而且其本身并不存放数据,只是将 agentd 发来的数据暂时存放,而后再提交给server,该架构经常是和 master-node-client 架构做比较的架构,一般适用于跨机房、跨网络的中型网络架构的监控。
3、master-node-client
架构
该架构是 zabbix 最复杂的监控架构,适用于跨网络、跨机房、设备较多的大环境。每个node 同时也是一个 server 端,node下面可以接 proxy,也可以直接接client。node有自己的配置文件和数据库,其要做的是将配置信息和监控数据向 master 同步,master 的故障或损坏不影响 node 其下的架构的完整性。
4. zabbix配置文件
zabbix配置文件种类:
- 服务器端配置文件(/usr/local/etc/zabbix_server.conf)
- 客户端配置文件(/usr/local/etc/zabbix_agentd.conf)
- zabbix代理配置文件(/usr/local/etc/zabbix_proxy.conf)
服务器端配置文件zabbix_server.conf常用配置参数:
参数 | 作用 |
---|---|
LogFile | 设置服务端日志文件存放路径 |
ListenIP | 设置服务端监听IP |
ListenPort | 设置服务端监听的端口号 |
PidFile | 设置服务端进程号文件存放路径 |
DBHost | 指定zabbix的数据库服务器IP |
DBName | 指定zabbix使用的数据库库名 |
DBUser | 指定zabbix数据库登录用户 |
DBPassword | 指定zabbix数据库登录密码 |
DBPort | 指定zabbix数据库端口号 |
User | 设置zabbix以什么用户的身份运行 |
AlertScriptsPath | 设置告警脚本存放路径 |
ExternalScripts | 外部脚本存放路径 |
客户端配置文件zabbix_agentd.conf常用配置参数:
参数 | 作用 |
---|---|
Server | 指定zabbix服务器的IP或域名 |
ServerActive | 指定zabbix服务器的IP或域名 |
Hostname | 指定本机的主机名,此项必须与web界面配置项一致 |
UnsafeUserParameters | 是否启用自定义监控项,可选值为 |
UserParameter | 指定自定义监控脚本参数 |
LogFile | 设置客户端日志文件存放路径 |
zabbix代理配置文件zabbix_proxy.conf
参数 | 作用 |
---|---|
ProxyMode | Proxy工作模式,默认为主动模式,主动发送数据至Server |
Server | 指定Server端地址 |
ServerPort | Server端PORT |
Hostname | Proxy端主机名 |
ListenPort | Proxy端监听端口 |
DataSenderFrequency | Proxy向Server发送数据的时间间隔 |
5. 部署zabbix5.0服务端
环境说明:
服务端IP | 要安装的应用 |
---|---|
192.168.32.140 | lamp架构 zabbix server zabbix agent |
因为zabbix
是用php
语言开发的,所以必须先部署lamp
架构,使其能够支持运行php
网页
lamp架构部署 : https://www.cnblogs.com/shipment/p/13265611.html
zabbix5.0官方安装文档:https://www.zabbix.com/documentation/current/manual/installation/install
5.1 zabbix服务端安装
//安装依赖包
[root@localhost ~]# yum -y install net-snmp-devel libevent-devel
......
//下载zabbix
[root@localhost ~]# wget https://cdn.zabbix.com/zabbix/sources/stable/5.0/zabbix-5.0.2.tar.gz
......
//解压
[root@localhost ~]# tar xf zabbix-5.0.2.tar.gz
[root@localhost ~]# cd zabbix-5.0.2
[root@localhost ~/zabbix-5.0.2]# ls
aclocal.m4 ChangeLog config.sub database install-sh man README
AUTHORS compile configure depcomp m4 misc sass
bin conf configure.ac include Makefile.am missing src
build config.guess COPYING INSTALL Makefile.in NEWS ui
//创建zabbix用户
[root@localhost ~/zabbix-5.0.2]# useradd -r -M -s /sbin/nologin zabbix
[root@localhost ~/zabbix-5.0.2]# id zabbix
uid=305(zabbix) gid=305(zabbix) groups=305(zabbix)
//配置zabbix数据库
[root@localhost ~/zabbix-5.0.2]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.30 MySQL Community Server (GPL)
Copyright (c) 2000, 2020, 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.
#utf-8是Zabbix支持的唯一编码,要使Zabbix服务器/代理与MySQL数据库正常工作,需要字符集UTF 8和UTF 8_bin排序规则。
mysql> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix123!';
Query OK, 0 rows affected, 2 warnings (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
[root@localhost ~/zabbix-5.0.2]# ls
aclocal.m4 ChangeLog config.sub database install-sh man README
AUTHORS compile configure depcomp m4 misc sass
bin conf configure.ac include Makefile.am missing src
build config.guess COPYING INSTALL Makefile.in NEWS ui
[root@localhost ~/zabbix-5.0.2]# cd database/mysql/
data.sql double.sql images.sql Makefile.am Makefile.in schema.sql
[root@localhost ~/zabbix-5.0.2]# cd database/mysql/
[root@localhost ~/zabbix-5.0.2/database/mysql]# mysql -uzabbix -pzabbix123! zabbix < schema.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@localhost ~/zabbix-5.0.2/database/mysql]# mysql -uzabbix -pzabbix123! zabbix < images.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@localhost ~/zabbix-5.0.2/database/mysql]# mysql -uzabbix -pzabbix123! zabbix < data.sql
mysql: [Warning] Using a password on the command line interface can be insecure.
//编译安装zabbix
[root@localhost ~/zabbix-5.0.2/database/mysql]# cd ../../
[root@localhost ~/zabbix-5.0.2]# ./configure --enable-server \
--enable-agent \
--with-mysql \
--with-net-snmp \
--with-libcurl \
--with-libxml2
......
[root@localhost ~/zabbix-5.0.2]# make install
5.2 zabbix服务端配置
[root@localhost ~]# ls /usr/local/etc/
zabbix_agentd.conf zabbix_agentd.conf.d zabbix_server.conf zabbix_server.conf.d
//修改服务端配置文件
//设置数据库信息
[root@localhost ~]# vim /usr/local/etc/zabbix_server.conf
....
DBPassword=zabbix123! //设置zabbix数据库连接密码
//启动zabbix_server和zabbix_agentd
[root@localhost ~]# zabbix_server
[root@localhost ~]# zabbix_agentd
[root@localhost ~]# ss -tanl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 *:10050 *:*
LISTEN 0 128 *:10051 *:*
LISTEN 0 128 127.0.0.1:9000 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 [::1]:25 [::]:*
LISTEN 0 80 [::]:3306 [::]:*
LISTEN 0 128 [::]:80 [::]:*
LISTEN 0 128 [::]:22 [::]:*
//修改/etc/php.ini的配置并重启php-fpm
[root@localhost ~]# sed -ri 's/(post_max_size =).*/\1 16M/g' /etc/php.ini
[root@localhost ~]# sed -ri 's/(max_execution_time =).*/\1 300/g' /etc/php.ini
[root@localhost ~]# sed -ri 's/(max_input_time =).*/\1 300/g' /etc/php.ini
[root@localhost ~]# sed -i '/;date.timezone/a date.timezone = Asia/Shanghai' /etc/php.ini
[root@localhost ~]# service php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
[root@localhost ~/zabbix-5.0.2]# ls
aclocal.m4 ChangeLog config.log configure.ac include Makefile misc sass
AUTHORS compile config.status COPYING INSTALL Makefile.am missing src
bin conf config.sub database install-sh Makefile.in NEWS ui
build config.guess configure depcomp m4 man README
[root@localhost ~/zabbix-5.0.2]# cd ui/
[root@localhost ~/zabbix-5.0.2/ui]# mkdir /usr/local/apache/htdocs/zabbix
[root@localhost ~/zabbix-5.0.2/ui]# cp -a . /usr/local/apache/htdocs/zabbix
[root@localhost ~/zabbix-5.0.2/ui]# chown -R apache.apache /usr/local/apache/htdocs
[root@localhost ~/zabbix-5.0.2/ui]# ls /usr/local/apache/htdocs/zabbix/
//配置apache虚拟主机
[root@localhost ~]# vim /etc/httpd24/httpd.conf
//在配置文件的末尾加如下内容
<VirtualHost *:80>
DocumentRoot "/usr/local/apache/htdocs/zabbix"
ServerName www.test.com
ProxyRequests Off
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/apache/htdocs/zabbix/$1
<Directory "/usr/local/apache/htdocs">
Options none
AllowOverride none
Require all granted
</Directory>
</VirtualHost>
//设置zabbix/conf目录的权限,让zabbix有权限生成配置文件zabbix.conf.php
[root@localhost ~]# chmod 777 /usr/local/apache/htdocs/zabbix/conf
[root@localhost ~]# ll -d /usr/local/apache/htdocs/zabbix/conf
drwxrwxrwx 3 1000 1000 94 Jul 6 05:54 /usr/local/apache/htdocs/zabbix/conf
//重启apache
[root@localhost ~/zabbix-5.0.2/ui]# apachectl restart
[root@localhost ~/zabbix-5.0.2/ui]# ss -tanl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 100 127.0.0.1:25 *:*
LISTEN 0 128 *:10050 *:*
LISTEN 0 128 *:10051 *:*
LISTEN 0 128 127.0.0.1:9000 *:*
LISTEN 0 128 *:22 *:*
LISTEN 0 100 [::1]:25 [::]:*
LISTEN 0 80 [::]:3306 [::]:*
LISTEN 0 128 [::]:80 [::]:*
LISTEN 0 128 [::]:22 [::]:*
//配置zabbix开机自启
[root@localhost ~/zabbix-5.0.2/misc/init.d/fedora/core]# pwd
/root/zabbix-5.0.2/misc/init.d/fedora/core
[root@localhost ~/zabbix-5.0.2/misc/init.d/fedora/core]# ls
zabbix_agentd zabbix_server
//拷贝启动脚本(如果报错,就将启动脚本软连接到/usr/local/sbin/)
[root@localhost ~/zabbix-5.0.2/misc/init.d/fedora/core]# cp -a . /etc/init.d/
[root@localhost ~/zabbix-5.0.2/misc/init.d/fedora/core]# ls /etc/init.d/
functions mysqld netconsole network php-fpm README zabbix_agentd zabbix_server
//添加开机自启
[root@localhost ~/zabbix-5.0.2/misc/init.d/fedora/core]# chkconfig --add zabbix_server
[root@localhost ~/zabbix-5.0.2/misc/init.d/fedora/core]# chkconfig --add zabbix_agentd
[root@localhost ~/zabbix-5.0.2/misc/init.d/fedora/core]# chkconfig zabbix_server on
[root@localhost ~/zabbix-5.0.2/misc/init.d/fedora/core]# chkconfig zabbix_agentd on
[root@localhost ~/zabbix-5.0.2/misc/init.d/fedora/core]# chkconfig --list
Note: This output shows SysV services only and does not include native
systemd services. SysV configuration data might be overridden by native
systemd configuration.
If you want to list systemd services use 'systemctl list-unit-files'.
To see services enabled on particular target use
'systemctl list-dependencies [target]'.
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
php-fpm 0:off 1:off 2:on 3:on 4:on 5:on 6:off
zabbix_agentd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
zabbix_server 0:off 1:off 2:on 3:on 4:on 5:on 6:off
5.3 zabbix web界面安装
- 修改/etc/hosts文件(windows在 C:\Windows\System32\drivers\etc\hosts),添加域名与IP的映射
- 在浏览器上访问域名,本文设置的域名为www.test.com,你需要修改成你自己的域名
- 恢复zabbix/conf目录的权限为755
192.168.32.140 www.test.com
在浏览器上访问域名或ip进行安装:
下一步
下一步
输入Zabbix服务器的name是可选的,但是如果提交,它将显示在菜单栏和页面标题中。
恢复zabbix/conf目录的权限为755:
[root@localhost ~]# chmod 755 /usr/local/apache/htdocs/zabbix/conf
[root@localhost ~]# ll -d /usr/local/apache/htdocs/zabbix/conf
drwxr-xr-x 2 apache apache 104 Aug 17 13:05 /usr/local/apache/htdocs/zabbix/conf
5.4 zabbix 登录
zabbix默认登录用户名和密码:
用户名 | 密码 |
---|---|
Admin | zabbix |
5.5 解决zabbix中文图形乱码问题
在C盘中搜索字体
我这里选择等线简体,复制到桌面,用Xftp工具上传到服务器
[root@localhost /usr/local/apache/htdocs/zabbix/assets/fonts]# ls
DejaVuSans.ttf Deng.ttf
#备份原本的字体
[root@localhost /usr/local/apache/htdocs/zabbix/assets/fonts]# mv DejaVuSans.ttf DejaVuSans.ttf.back
将新字体重命名为原字体的名字
[root@localhost /usr/local/apache/htdocs/zabbix/assets/fonts]# mv Deng.ttf DejaVuSans.ttf
刷新web端查看(如果有显示异常,重启zabbix_server后在查看)
切换会英文也没有显示问题
在切回中文