前言

对于运维人员来说,服务器各个参数及性能指标对业务的运行至关重要,这些性能指标会因为种种原因发生变化,变化的指标很有可能不是所期望的,此时需要运维人员去处理这些问题。对于24小时不停运转的业务来说,运维人员不可能时时刻刻登录到服务器上查看相关信息,此时一套完整且功能强大的自动化监控系统能够大大提高运维人员的工作效率。那么了解主流监控产品及安装是每一个运维人员必备的知识和技能。

一、监控目的

监控是指对行为、活动或其他变动中信息的一种持续性关注,通常是为了对人达成影响、管理、指导或保护的目的。来自《维基百科》

在运维行业中也是如此,只不过对象变成了服务器、各种应用指标等,运维人员想通过监控去对业务达到管理、指导或保护的目的。

监控的目的就很明确:

  • 报告系统的运行状况:通过系统的运行状况能够及时的对系统性能进行调整

  • 及时发现系统问题:能够第一时间发现问题并及时处理

二、监控方式

过去传统的运维只能通过系统相关命令查看系统指标,这是个体力活。少量服务器及应用可能还能查看,当有大量服务器及应用时,这就是一个艰巨的任务,并且不能实时的告知系统异常,所以传统的运维目前逐步淘汰。另一种就是通过自动化监控系统,监控系统就能很好的规避传统运维手动操作的痛点,同时也能实现自动化监控,及时发现问题进行预警,大大提高运维人员的工作效率。

三、主流监控系统

一套完整的业务系统要有网络设备、服务器、应用服务等,市面上就有应对不同设备及应用的监控系统,当然目前很多监控系统都结合在一起各有优缺点。具体可百度,这里大致说明以下三种监控系统:

  • Zabbix:基于WEB界面提供监视数据,有着美观的WEB界面及容易上手是目前主流的监控产品,能够监控服务器信息、应用信息、网络设备、自定义监控等等。
  • Cacti:更善于监控网络流量、网络设备。
  • Nagios:和Zabbix一样,都是能够监控服务器信息、应用信息、网络设备、自定义监控等等。

四、Zabbix介绍

Zabbix中国官网:https://www.zabbix.com/cn/

Zabbix产品手册:https://www.zabbix.com/cn/manuals

Zabbix是一个企业级分布式开源监控系统,Zabbix 软件能够监控众多网络参数和服务器的健康度、完整性。

Zabbix 使用灵活的告警机制,允许用户为几乎任何事件配置基于邮件的告警。这样用户可以快速响应服务器问题。Zabbix 基于存储的数据提供出色的报表和数据可视化功能。这些功能使得 Zabbix 成为容量规划的理想选择。

Zabbix 支持主动轮询(polling)和被动捕获(trapping)。Zabbix所有的报表、统计数据和配置参数都可以通过基于 Web 的前端页面进行访问。基于 Web 的前端页面确保您可以在任何地方访问您监控的网络状态和服务器健康状况。适当的配置后,Zabbix 可以在监控 IT 基础设施方面发挥重要作用。无论是对于有少量服务器的小型组织,还是拥有大量服务器的大企业而言,同样适用。

Zabbix 是免费的。Zabbix 是根据 GPL 通用公共许可证的第二版编写和发布的。这意味着产品源代码是免费发布的,可供公共使用。

以上,来自Zabbix 官方手册

总的来说Zabbix是一个企业级的开源监控系统,能够监控很多内容,且有着灵活的告警机制,重点是开源免费!

Zabbix组成

  • 监控服务器
    • 监控服务器可以通过SNMP或Agent采集数据
    • 数据可以写入MySQL、Oracle等数据库中
  • 被监控主机\网络设备
    • 被监控主机需要安装Agent
    • 常见的网络设备一般支持SNMP

Zabbix默认端口

  • Server端:10051
  • Agent端:10050

既然这么好,不多说直接开始安装体验!

五、Zabbix服务端安装

5.1 环境介绍

  • 操作系统:CentOS 7.9.2009 Minimal
  • WEB服务:Nginx 1.20.1
  • 数据库:MySQL 5.7.26
  • Zabbix版本:4.0.32
  • PHP:7.0
  • PHP-FPM:7.0
  • 网络环境:互联网

安装前自然不必多说,首当其冲就是配置YUM源,使用的是阿里云EPEL(Extra Packages for Enterprise Linux) YUM源、Centos-7镜像YUM源、Webtatic的YUM源。

参考链接

# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# yum -y install epel-release
# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

5.2 准备系统环境

安装依赖包

Nginx依赖包
# yum -y install gcc pcre-devel openssl-devel

MySQL依赖包
# yum -y install perl-JSON perl-Data-Dumper mysql-devel 

Zabbix依赖包
# yum -y install net-snmp-devel curl-devel libevent-devel php70w-gd php70w-xml php70w-bcmath php70w-mbstring

关闭防火墙、selinux
# iptable -F ; setenforce 0

5.3 安装Nginx(源码编译安装)

# wget http://nginx.org/download/nginx-1.20.1.tar.gz  
# tar -xf nginx-1.20.1.tar.gz && cd nginx-1.20.1
# ./configure --with-http_ssl_module
# make && make install
启动Nginx
# /usr/local/nginx/sbin/nginx
开机自启动
# 
测试Nginx
# curl http://127.0.0.1
......
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
.....

5.3.1 配置Nginx

# vim /usr/local/nginx/conf/nginx.conf
了解Nginx的读者可能知道以下配置的含义,不了解也没关系,照样能搭建网页服务,具体可自行百度学习。
在65行添加以下内容,并按照以下内容去掉注释,注意75行是修改配置文件参数的。
 43         location / {
 44             root   html;
 45             index  index.html index.htm index.php;  # 新增index.php
 46         }
 .......
 65         fastcgi_buffers 8 16k;                 # 缓存php生成的页面内容,8个16k,缓存越大速度越快
 66         fastcgi_buffer_size 32k;                 # 缓存php生产的头部信息
 67         fastcgi_connect_timeout 300;             # 连接PHP的超时时间
 68         fastcgi_send_timeout 300;                 # 发送请求的超时时间
 69         fastcgi_read_timeout 300;                     # 读取请求的超时时间
 70         location ~ \.php$ {
 71             root           html;
 72             fastcgi_pass   127.0.0.1:9000;
 73             fastcgi_index  index.php;
 74         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
 75             include        fastcgi.conf;
 76         }
 
 重新加载配置文件
 # /usr/local/nginx/sbin/nginx -s reload

5.4 PHP、PHP-FPM(YUM安装)

首先由于EPEL源和镜像源的PHP版本是5版本,无法满足Zabbix对PHP 版本的要求,Zabbix 4.0需要PHP 7版本,为了避免源码安装PHP 的各种复杂操作,通过YUM源安装是最高效和选择。

5.4.1 安装PHP7、PHP-FPM

# yum -y install php70w-fpm php70w php70w-mysql

5.4.2 启动PHP-FPM

# systemctl start php-fpm
# systemctl enable php-fpm

5.4.3 测试PHP环境

# php -v
PHP 7.0.33 (cli) (built: Dec  6 2018 22:30:44) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies

# vim /usr/local/nginx/html/test.php
<?php
$i=100;
echo $i;
?>
# curl http://127.0.0.1/test.php
100

5.5 安装MySQL(通用二进制版本)

5.5.1 准备MySQL环境

# useradd  -s /sbin/nologin mysql
# mkdir /database/ /data/
# chown -R mysql:mysql /database/ /data/

# wget -O /database/mysql-5.7.26.tar.gz https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.26-el7-x86_64.tar.gz 
# tar -xf /database/mysql-5.7.26.tar.gz 
# ln -s /database/mysql-5.7.26 /database/mysql

# vim /etc/profile
export PATH=$PATH:/database/mysql/bin/
# source /etc/profile

# mysql -V
mysql  Ver 14.14 Distrib 5.7.26, for el7 (x86_64) using  EditLine wrapper

5.5.2 初始化MySQL、添加配置文件、启动MySQL、添加管理员密码

# mysqld --initialize-insecure --user=mysql --basedir=/database/mysql --datadir=/data

# cat > /etc/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/database/mysql
datadir=/data
server_id=6
port=3306
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock
EOF

# cp /database/mysql/support-files/mysql.server /etc/init.d/mysqld
# /etc/init.d/mysqld start
# 设置开机自启动
# /etc/init.d/mysqld status
# mysqladmin -uroot password "Admin@123"
# mysql -u"root" -p"Admin@123"

5.6 安装Zabbix服务端(源码编译安装)

5.6.1 源码编译安装Zabbix

# wget https://cdn.zabbix.com/zabbix/sources/stable/4.0/zabbix-4.0.32.tar.gz
# tar -xf zabbix-4.0.32.tar.gz
# ./configure  --enable-server --enable-agent --enable-proxy --with-mysql=/usr/bin/mysql_config --with-net-snmp --with-libcurl
    --enable-server:表示监控服务器
    --enable-agent:表示被监控端agent,监控私有数据.这里是服务端也安装agent实现监控
    --enable-proxy:支持分布式监控
    --with-mysql=/usr/bin/mysql_config:指定mysql程序决定路径,获取到mysql信息
    --with-net-snmp:监控交换机路由器
    --with-libcurl:调用curl软件监控公开数据:http、ftp等等,必须要有curl才能监控公开数据
# make && make install

5.6.2 初始化Zabbix

# cp -r frontends/php/* /usr/local/nginx/html/

数据库中创建创建Zabbix用户
# mysql -u"root" -p"Admin@123" 
mysql> create database zabbix default character set utf8 collate utf8_bin;
mysql> grant all on zabbix.* to zabbix@'%' identified by 'Zabbix@123';

依次向zabbix库导入Zabbix所需的数据
# mysql -uzabbix -p'Zabbix@123' zabbix < database/mysql/schema.sql
# mysql -uzabbix -p'Zabbix@123' zabbix < database/mysql/images.sql
# mysql -uzabbix -p'Zabbix@123' zabbix < database/mysql/data.sql

修改zabbix_server配置文件,指定数据库名称、用户名、密码
# vim /usr/local/etc/zabbix_server.conf
85 DBHost=127.0.0.1    # 数据库主机
94 DBName=zabbix    # 设置数据库名称
110 DBUser=zabbix    # 设置数据库账户
118 DBPassword=Zabbix@123    # 设置数据库密码
125 DBSocket=/tmp/mysql.sock	# 这里的套接字路径和MySQL配置文件路径要一直
133 DBPort=3306	# 数据库端口

创建系统用户
# useradd -s /sbin/nologin zabbix

5.6.3 修改PHP配置以满足Zabbix要求

# vi /etc/php.ini
; 设置时区
date.timezone = Asia/Shanghai
; 最大执行时间,秒
max_execution_time = 300
; POST数据最大容量
post_max_size = 32M
; 服务器接收数据的时间限制
max_input_time = 300
; 内存容量限制
memory_limit = 128M
# systemctl restart php-fpm    修改完后重启php-fpm服务

5.6.4 启动Zabbix相关程序

# zabbix_agentd
# zabbix_server
# ss -anptu | grep 10051
tcp    LISTEN     0      128       *:10051                 *:*                   users:
......

5.6.5 访问Zabbix并进行最后初始化

浏览器访问主机IP地址:http://10.8.99.7/,这里就不放图了,有图之后文章变得非常臃肿,非常难看,步骤也非常简单不需要放图.

  1. Welcome: 欢迎
  2. Check of pre-requisites:检查先决条件,需要注意有一项PHP LDAP是Warning状态,可以忽略
  3. Configure DB connection:设置数据库,需要注意Database host设置为127.0.0.1,而不是localhost
  4. Zabbix server details:服务器信息
  5. Pre-installation summary:安装前总结
  6. Install:安装,这里会出权限问题,需要设置权限chmod -R 777 /usr/local/nginx/html/,再次刷新即可完成最后初始化

Zabbix默认管理员用户名密码:Admin/zabbix

以上,完成Zabbix服务端的安装!

5.7 归纳总结

六、Zabbix客户端安装

结束