监控概念及zabbix部署
监控概述
对于监控系统在企业架构中不是新的技术,但却是必不可少的重要组成部分,所谓无监控,不运维!监控系统可以帮助运维、开发、测试等人员及时的发现服务器出现的故障,并及时的发送告警通知。
对于监控软件所应该具备的功能如下:
指标数据采集(抓取)
指标数据存储(数据库)白盒
指标数据可视化(Zabbix可以切换中文)
故障告警功能(黑盒)
监控对象介绍
系统层监控
系统监控:CPU利用率、内存利用率、磁盘IO速度、进程数量、内核完整性等...
网络监控:网络设备进出口流量、工作负载、网络延迟、丢包率等...(zabbix用SNMP协议,放开该协议即可监控)
服务软件监控
消息中间件:kafka、RocketMQ、RabbitMQ等.....
Web服务容器:Nginx、Tomcat、httpd、docker、kubernetes等.....
数据库及缓存系统:MySQL、PostgreSQL、MongoDB、Redis、ElasticSearch等.....
存储系统:Ceph
业务层监控
日志收集监控,zabbix不适用,ELK
例如电商网站销售量、转化率等
业务接口:登录数、注册数、订单量、支付数量等
Linux系统常用监控命令
以下命令是对系统的CPU、内存、硬盘、网络进行监控的命令
free #查看内存利用率
df #查看正在使用分区利用率
top #查看系统健康状态(类似windows的任务管理器)
htop #与top相同,查看系统健康状态(系统不自带,在epel源提供)
uptime #查看cpu利用率
iftop #用于显示本机网络流量情况及相互通信的流量集合(默认系统不自带,需安装主包:iftop,依赖包:flex byacc libpcap ncurses ncurses-devel libpcap-devel )
iostat # iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视(默认系统不自带,需安装:sysstat)的
iotop #与iostat类似, 用来监视磁盘1/O使用状况(默认系统不自带,需安装:iotop)
vmstat # 是Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、 CPU活动进行监控 (默认系统不自带,需安装:sysstat)
netstat/ss # 用于显示各种网络相关信息,如网络连接,路由表,接口状态连接等,
nethogs #用来按进程或程序实时统计网络带宽使用率(默认系统不自带,epel源安装:nethogs)
ipmi #用于对服务器硬件进行监控(默认系统不自带,需安装:ipmitool)
常用的监控软件介绍
·Nagios:本身只能做实时的数据监控,无法实现数据的持久化保存,致命缺点无法查询历史数据(没有数据库,无法存储,只能在内存短暂保留,淘汰)
·Cacti:最初应用在机房做流量方面的监控,致命缺点没有故障告警功能(淘汰)
·Ganglia: 跟Cactii类似,致命缺点没有故障告警功能(淘汰)
·Open-Falcon:小米公司开源的一款监控软件,目前还是比较冷门,很多中间件不支持监控(例如:httpd、Tomcat)
· Zabbix:2012年诞生的一款分布式监控系统,功能完善(例如:数据存储、数据可视化、故障告警等)目前主要应用在传统的物理服务器、虚拟机、路由交换领域的监控(硬件设备、传统应用程序)
· Promethues: (2012诞生)2016年崛起的一款监控系统,功能完善(例如:数据存储、数据可视化、故障告警等)目前主要应用在容器领域的监控系统(容器2014流行)
付费的监控软件:
监控宝:https://www.jiankongbao.com/
博瑞:https://www.bonree.com/
Zabbix介绍
Zabbix 是C语言编写的企业级开源免费的分布式(服务器分布在不同区域)监控解决方案,可监控网络的众多参数以及服务器、虚拟机、应用程序、服务、数据库、网站、云等的健康状况和完整性。
Zabbix 使用灵活的报警通知机制,允许用户为几乎任何事件配置基于电子邮件的警报。这允许对服务器问题做出快速反应。
Zabbix 可通过存储的数据提供出色的报告和数据可视化功能。
官网地址:https://www.zabbix.com/
LTS long term support 五年提供支持,三年全面支持,两年最低限度支持
Zabbix安装
建议apache ,因为支持php,zabbix的web界面是通过php写的,而nginx需要修改配置
Nginx则是支持高并发
配置zabbix的仓库
提示:zbx-server主机操作
#安装zabbix5.0存储库(二进制安装方式)
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
#安装zabbix软件包
yum install zabbix-server-mysql zabbix-agent -y
#安装Zabbix frontend前端所需软件包
Enable Red Hat Software Collections
yum install centos-release-scl
编辑配置文件 /etc/yum.repos.d/zabbix.repo 启用 zabbix-frontend repository.(删掉也可以)
安装Zabbix frontend packages. 前端软件包
yum install zabbix-web-mysql-scl zabbix-apache-conf-scl -y
#zabbix-web-mysql-sc1 用于连接数据库
#zabbix-apache-conf-scl 用于连接apache
安装数据库软件
zabbix不自带库,需要手动安装
yum -y install mariadb-server
#启动数据库服务并设置随机自启
Systemctl start mariadb && systemctl enable mariadb
#进入数据库
Mysql
#创建存储数据的库,并支持中文(库名:zabbix)
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
#创建连接数据库的用户,并设置密码(用户名:zabbix)
MariaDB [(none)]> create user zabbix@localhost identified by '123456';
#数据库及用户授权(如果数据库与zabbix分开,需要开启远程登录)
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost;
#在Zabbix服务器主机上,导入初始架构和数据(安装zabbix-server-mysql包时提供的)系统将提示您输入新创建的密码
zcat /usr/share/doc/zabbix-server-mysql-(此处加版本,对应5.0.30)/create.sql.gz | mysql-uzabbix -p zabbix (路径通过rpm -ql zabbix-server-mysql 确认)
Enter password: 123456 输入zabbix用户密码
为Zabbix服务器配置连接数据库
vim /etc/zabbix/zabbix_server.conf
….
100 DBName=zabbix #数据库名称(存储数据的仓库)
116 DBUser=zabbix #连接数据库的用户(给zabbix程序用的一个身份)
124 DBPassword=123456 #设置zabbix用户密码
为PHP配置正确的时区(php注释以分号开头)
vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
php_value[date.timezone] = Asia/Shanghai 亚洲/上海
#启动所有服务并设置服务随机自启
systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm
Zabbix服务参数介绍
zabbix-server 端口:10051
zabbix-agent 端口:10050
zabbix server主配置文件:/etc/zabbix/zabbix_server.conf
zabbix agent主配置文件:/etc/zabbix/zabbix_agentd.conf
zabbix企业微信报警脚本路径:/usr/lib/zabbix/alertscripts
zabbix自定义监控项路径:/etc/zabbix/zabbix_agentd.d
zabbix日志文件路径:/var/log/zabbix/
登录ZABBIX WEB
访问前端
从浏览器上访问Zabbix前端URL: http://server.ip/zabbix
登录:用户名Admin密码zabbix
Zabbix管理
创建组
zabbix并没有为单独用户设置主机管理权限 所有的权限都通过组进行统一分配,当用户加入到对应 的组后,将权限分配到对应的组中即可继承组权限。
添加监控主机
Zabbix对于主机的监控非常灵活,它可以是物理服务器、网络交换机、虚拟机、应用等。
提前准备好一台Linux主机,并安装zabbix-agent客户端程序。(只用装agent)
#下载zabbix官方仓库
rpm -uvh https://repo.zabbix.com/zabbix/5.O/rhel/7/x86_64/zabbix-release-5.O-1.el7.noarch.rpm
#安装zabbix agent
yun install zabbix-agent
#查询软件包安装到系统中文件
rpm -ql zabbix-agent
...
/etc/zabbix/zabbix-agent.conf
#修改agent配置文件,定义zabbix server地址
vim /etc/zabbix/zabbix-agent.conf
...
117 Server=192.168.0.14 --指定server地址
#设置服务开机自启
systemctl start zabbix-agent
systemctl enable zabbix-agent
回到Zabbix server 的web界面, 通过 配置(Configuration) → 主机(Hosts)→创建主机(Create host) 以添加新的主机。(主机名称不支持中文)
通过应用集监控(应用的大型集合)
清理数据再建新的模板
模板概述
Zabbix为用户提供了很多开箱即用的模板,具体模板可通过配置一模板查看,模板大概分类如下:
网络设备的标准化模板:对交换机和路由器等网络设备进行监控, 网络设备本身(基本上是机框)和网络接口
机框故障监控(电源,风扇和温度,总体状态)
机框性能监控(CPU和内存项)
机框资产收集(序列号,型号名称,固件版本)
使用IF-MIB和EtherLike-MIB进行网络接口监控(接口状态,接口流量负载,以太网的双工状态)
HTTP模板:用于对很多服务的HTTP状态(UP/DOWN)进行监控,例如:Apache、Nginx等。
IPMI模板: 用于监视服务器硬件,如温度电压、风扇工作状态、电源状态等。
JMX模板:用于监控Java应用程序。
ODBC: 用于数据库(MySQL、Oracle、PostgreSQL)的监控模板。的
Zabbix agent 2:用于Ceph存储、Docker容器、Memcached、Mysql、Oracle、PostgreSQL、
Redis等应用监控。
Zabbix agent: 用于对Apache、HAProxy、Nginx、PHP-FPM、RabbitMQ、等应用监控。
除了上述模板外,Zabbix社区还提供了大量模板供用户免费下载
社区地址:https://share.zabbix.com/(也可通过界面左侧配置栏的Share直达)
友情提示:大部分监控模板已经在zabbix中提供,并且能够满足大部分监控需求。
新建模板
模版可以对监控项、触发器、图形等进行归类,当一个模版链接到一个主机后,主机会继承这个模版中的所有功能。
模版名称:名称自定义,不支持中文。
群组:模版必须属于一个组,可以自建,可以使用zabbix提供的组。
新建应用集
模板中的应用集我们可以理解为监控项的分组,可以将相同类型的监控项分配到同一个应用集内。
配置→ 模板 找到对应的模板选择 应用集→创建应用集
新建监控项
监控项是Zabbix中获得数据的基础,没有监控项,就没有数据。
配置→ 模板 页面查找到我们自建的模板,点击模板中的 监控项 然后 创建监控项
以server作为样板
趋势存储代表粗粒度的数据,如每小时数据,节省数据库资源
浮点类型用来获取小数。
解决Zabbix中文乱码
将准备好的字体文件传到zabbix存放字体文件路径,并覆盖原文件内容。
cd /usr/share/zabbix/assets/fonts/
cp SIMSUN.TTC graphfont.ttf
Zabbix故障告警
Zabbix故障告警概述
zabbix具备灵活的故障告警功能,允许用户几乎为任何的监控项配置基于电子邮件、短信、企业微信、钉钉等告警通知,这样管理员就可以快速响应服务器出现的问题。
E-mail报警
需要通过网页将邮箱的SMTP功能启动,然后新增授权码,然后获取到163邮箱SMTP服务器的地址。
解释:
·名称:Email为报警媒介类型名称
·SMTP服务器:用于发送邮件的服务器
·SMTP HELO:向服务器标识用户身份
·SMTP电邮:用于发送邮件的账户
添加触发器
监控项只是用于收集数据,当监控项收集了数据后,如果需要自动评估收到的数据,我们则需要定义触发器,触发器会根据异常状态触发报警,而不需要我们直接在Zabbix前端进行查看,这就是通知的功能。
为监控项配置触发器,前往配置(Configuration)→ 主机(Hosts)找到对应主机(Newhost)点
击旁边的触发器(Triggers) 然后点击创建触发器(Create trigger)
测试触发器
在练习添加一个CPU的触发器,配置--主机 点击触发器创建触发器
触发器的名称使用 CPU 1分钟负载过高的
写法如下:大致含义为一分钟内,CPU负载平均值超10%则触发
状态列如果闪烁意味着这个触发器状态最近30分钟内发生过变化。
新建动作
为了建立一个报警通知,前往配置(Configuration) →动作(Actions) 然后点击创建动作(Create action)
名称:动作的名称自定义且支持中文,一般设置成跟具体监控项或者触发器的名称含义一致即可,这样方便你清楚的知道具体是哪个监控项触发的告警。
条件:用于绑定对应的触发器
我们还需要定义这个动作具体做了什么一即在 操作(Operations) 中配置具体的操作。
点击新建(New) 将会打开一个操作表单。
下边是zabbix内置的用户自定义告警消息模板,用于指定发送告警的具体信息,将该内容复制到对应的参数内
接下来配置告警恢复操作,点击恢复操作内的添加
定义收件人
我们在定义一个外界的收件人邮箱,选择用户基本资料一 报警媒介 添加 收件人的邮箱,这个可以是实际工作中管理员的具体邮箱地址。
一切准备就绪,点击更新即可。
总结:
1)E-mail:报警媒介类型,通过什么方式去发送报警消息;
2)触发器:用于为监控项内的指标数据定义阈值(条件);
3)动作:用于绑定具体触发器,当触发器被触发时,用于发送告警消息;
4)收件人:用于接收告警消息;
验证告警信息
接下来我们要在被控主机上模拟多个用户登录系统来触发这个告警动作。
在监测(Monitoring) →问题(Problems)中,可以看到闪烁问题。
自定义触发器严重性
默认情况下,触发器的严重性以英文方式展示,可以在管理→一般一触发器设置中配置为中文
动作日志
动作日志可以查看zabbix执行过的所有告警动作,通过报表一动作日志查看
审计
审计用于记录我们在zabbix web上执行过的所有(造成改变)的行为,通过报表-审计查看
总结:
1.创建触发器(为监控项定义一个条件)
2.创建动作(跟触发器绑定,触发器一旦被触发,接下来就执行动作:可以是发送报警消息)
3.定义报警收件人
4.验证动作是否执行成功,通过动作日志查看
Zabbix企业微信报警
需要企业可信域名
Zabbix项目监控实战
目标:部署LNMP架构并上线Discuz论坛项目,并通过Redis为论坛提供缓存服务,然后对论坛做网站数据统计,最后通过zabbix监控相关服务。
实现步骤:
1.部署LNMP架构
2.上线Discuz项目到LNMP架构:Discuz!是一套通用的社区论坛软件系统
3.redis为Discuz提供缓存
4.网站数据统计
网站IP: 1个IP是1台电脑
网站 UV(unique visitor): 是指浏览网站的实际用户,如果以UV作为流量统计标准,可以更加准确的了解实际上有多少个访问者来访问了相应的页面。
网站 PV(Page Views):即页面浏览量,用户24小时(0点到24点)内,每一次对网站中的
网页访问均被记录一次,网站的PV从某种程度上已成为投资者衡量商业网站表现的最重要尺度,就像收视率之于电视。
部署LNMP架构
在zabbix-client端部署LNMP架构
所需软件包:nginx php-fpm mariadb mariadb-server mariadb-devel php php-mysql
部署php-fpm与数据库
在zbx-client客户端主机部署
php-fpm 作为PHP进程管理程序。
#安装Mariadb-server及相关依赖
yum install mariadb mariadb-server php php-fpm php-mysql php-gd -y
#修改/etc/my.cnf 文件支持中文
vim /etc/my.cnf
[mysqld]
character-set-server=utf8 --手动添加
#启动服务并设置服务随机自启
systemctl start mariadb && systemctl enable mariadb
修改/etc/php-fpm.d/www.conf配置文件指定用户与组,并开启状态页面用于监控服务状态。
vim /etc/php-fpm.d/www.conf
39 user = nginx
41 group = nginx
121 pm.status_path = /php_status --取消注释(默认被注释)并改名为/php_status
修改配置/etc/php.ini 指定php时区
vim /etc/php.ini
date.timezone ="Asia/shanghai” 指定时区
部署Nginx
通过nginx官方仓库安装,并开启nginx状态页面功能
#创建nginx仓库文件
vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
#安装nginx
yum -y install nginx-1.22.0-1.e17.ngx.x86_64
修改/etc/nginx/conf.d/default.conf 文件(提前做好配置文件备份)
cp /etc/nginx/conf.d/default.conf{,.bak}
修改/etc/nginx/conf.d/default.conf 文件(提前做好配置文件备份)
cp /etc/nginx/conf.d/default.conf{,.bak}
#删除配置文件默认内容,替换为如下内容
cat /etc/nginx/conf.d/default.conf
server {
listen 80;
server name localhost;
#开启nginx状态页面
location = /status {
stub_status;
}
location / {
root /usr/share/nginx/htm1;
index index.php index.htm] index.htm;
}
#连接php-fpm
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi params;
}
#连接php_status页面
location /php_status {
root html;
fastcgi pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scriptsSfastcgi_script_name;
include fastcgi_params;
}
}
#启动服务&设置服务随机自启
systemctl restart nginx php-fpm && systemctl enable nginx php-fpm
#访问nginx状态页面:http://server ip/status
#访问php-fpm状态页面:http://server ip/php_status
#测试nginx与php之间的连接
vim /usr/share/nginx/html/phpinfo.php
<?php
phpinfo();
?>
#访问:http://server ip/phpinfo.php
#测试php与mysql协同方式一:
vim /usr/share/nginx/html/mysql.php
<?php
$con=mysql_connect("localhost","root","");
if(!$con){
die("could not connect to the db:\n".mysql_error());
}
else{
echo "success";
}
mysql_close($con);
?>
#测试php与mysql协同方式二:
<?php
$con=mysql_connect("localhost","root","");
if(!$con) echo "error":
else echo "success";
?>
上线Discuz项目
上线Discuz项目到nginx网页目录:/usr/share/nginx/html/
#解压项目代码
cd /usr/share/nginx/html/
解压项目
unzip Discuz_x3.3_SC_UTF8.zip
#将项目文件移动至html
mv upload/* .
#修改项目文件归属为nginx
chown -R nginx:nginx .
https://www.discuz.vip/download
Redis为Discuz提供缓存
数据存在redis缓存内,加速项目
#安装Redis (需要epel源)
yum -y install redis
#安装php-pecl-redis扩展模块(该模块用于php连接redis)
#可提前过滤对应软件包:
yum list|grep php|grep redis
#安装(需要epe1源)
yum -y install php-pecl-redis.x86_64
#重启php-fpm
systemct1 restart php-fpm
#查看模块
php -m 查看所有php模块,可结合grep过滤
php -m l grep redis
redis
让php找到redis:
启动Redis程序
systemctl start redis && systemctl enable redis
刷新页面查看到redis
当Redis为论坛加速后,用户在访问速度上会大大的提升,如需查看Redis数据,可通过命令行进入数据库查看:
redis-cli
127.0.0.1:6379> keys *
网站数据统计
网站统计是对网站的访问信息记录并归类,例如:网站访问量、用户访问最高的时段、访问最多的网页、停留时间、用户使用的搜索引擎,主要关键词、来路、入口、浏览深度、所用语言、时区、所用浏览器种类、时段访问量统计分析、日段访问量统计分析以及周月访问量统计分析等,网站访问数据的基础分析。
网站统计为网站收集用户信息提高和改进网站建设具有重要意义,国内常用的统计网站有CNZZ、51la、百度统计、腾讯统计、站长统计、51yes、SiteFlow等。