Zabbix基础介绍及搭建
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Zabbix基础介绍及搭建
zabbix
⼀、监控基本概述
1.什么是监控?
1.监控系统是整个运维环节,乃⾄整个产品⽣命周期中最重要的⼀环
2.事前及时预警发现故障
3.事后提供详细的数据⽤于追查定位问题
2.为什么要做监控?
1.系统的监控:实际上是对系统不间断的实时监控
2.实时反馈系统当前状态:我们监控某个硬件、或者某个系统,都是需要能实时看到当前系统的状态,是正常、异常、或者故障。
3.保证服务可靠性安全性:我们监控的⽬的就是要保证系统、服务、业务正常运⾏
4.保证业务持续稳定运⾏:如果我们的监控做得很完善,即使出现故障,能第⼀时间接收到故障报警,在第⼀时间处理解决,从⽽保证业务持续性的稳定运⾏。
(往往,第⼀时间知道业务宕机的都是⽤户)3.主要的监控⼯具
1.CACTI:⽹络监控,Cacti是⼀套基于PHP,MySQL,SNMP及RRDTool开发的⽹络流量监测图形分析⼯具
2.NAGIOS:系统监控,很久之前使⽤的,需要⼈为定义,没有图形,没有办法查询历史
3.ZABBIX:分布式监控
4.open-falcon:⼩⽶监控产品,开源的
5.premethous:普罗⽶修斯,监控docker,K8S
6.lepus:天兔,数据库监控
4.怎么监控
1.查看内存使⽤ free -m
2.取出监控的值
3.对⽐某个限制的值
4.如果超过限制的值则告警
5.监控的内容
1.公有云:云监控
2.硬件监控:CPU温度,主板温度,磁盘,⽹卡,风扇转速
3.系统监控:cpu,内存,⽹络,磁盘剩余
4.服务监控:
1)MySQL:主从复制是否有延迟(zabbix监控模板)
2)redis:主从复制是否有延迟
监控思路:zabbix没有固定模板,可以在主库中set⼀个key为时间戳,然后从库会同步这个时间戳(动态),写脚本时时获取这两个时间戳,做对⽐。
3)NFS:磁盘挂载状况
4)tomcat:JVM监控,⽼年代、新⽣代、永久带、full-gc、垃圾回收
5)rsync的同步情况,MD5校验⽂件是否被篡改
5.web页⾯监控:请求时间,响应时间,加载时间,nginx状态码监控,pv,uv,ip
6.⽹络监控:⽹卡流量(出⼊流量),贷款,监控宝
7.业务监控:
1)URL监控
2)api监控:针对业务的接⼝ basic.action
3)nginx状态码
4)tomcat⽇志监控
8.⽇志监控:ELK,第三⽅⽇志易
9.安全监控:firewalld,WAF,⽜盾云,安全狗
10.容器监控:premethous,普罗⽶修斯
⼆、脚本监控
1.监控命令
1)监控CPU
w top htop uptime glances ps
#不管⽤什么命令监控,查看CPU,我们都必须了解,系统的⽤户态和内核态。
us: ⽤户态跟⽤户的操作有关35%
sy: 内核态跟内核的处理有关65%
id: CPU空闲
#当我们执⾏⼀个命令的时候,很快能出来结果,但是有多少⼈知道,这个很快,他都占⽤了哪些时间呢?
[root@web02 ~]# time ls
real 0m0.002s 真实执⾏时间
user 0m0.001s ⽤户执⾏时间
sys 0m0.001s 系统执⾏时间
2)监控内存
free glances top htop
3)监控磁盘
df glances iotop iostat dstat
#以兆为单位,每秒执⾏⼀次,执⾏10次
[root@web02 ~]# iostat -dm 1 10
4)⽹络监控
glances ifconfig iftop ip route
nethogs 该命令可以查看某个进程所使⽤的流量
5)TCP11种状态监控命令
netstat -ant
ss -ant
2.监控内存实例
1)需求
每1分钟监控当前系统的内存使⽤状态,如果可⽤低于100MB则发送邮件。
同时打印当前还剩余多少内存
#思路
1.如何获取内存的状态信息 free -m
2.如何获取内存的可⽤状态 free -m|awk '/Mem/{print $NF}'
3.如何进⾏数字的⽐对,⾼于100MB不处理,低于100MB,发送邮件。
4.如何每分钟执⾏。
2)监控脚本
[root@zabbix ~]# vim /scripts/free.sh
#!/bin/bash
Hostname_Ip=$(hostname)_$(hostname -I|awk '{print $2}')
Date=$(date +%F)
while true
do
Mem_Free=$(free -m|awk '/^Mem/{print $NF}')
if [ $Mem_Free -lt 100 ];then
echo "$Date: $Hostname_Ip 内存可⽤量不⾜100M,当前剩余: $Mem_Free"
else
echo "$Date: $Hostname_Ip 内存可⽤量充⾜,当前剩余: $Mem_Free"
fi
sleep 5
done
3)思考
随着时间的推移,⽤户不断增多,服务消耗的内存越来越多,当系统内存不⾜的时候,可能会导致系统产⽣oom(out of memory)
1.当系统内存不⾜时就会⼤量使⽤swap(虚拟内存)
2.当系统⼤量使⽤swap的时候,系统会特别卡
注意:有时可能内存还有剩余300M或者500M,但是swap依然被使⽤
4)新脚本
[root@zabbix ~]# vim /scripts/free.sh
#!/bin/bash
Hostname_Ip=$(hostname)_$(hostname -I|awk '{print $2}')
Date=$(date +%F)
while true
do
Mem_Free=$(free -m|awk '/^Mem/{print $NF}')
Swap_used=$(free -m | awk '/^Swap/ {print $3}')
if [ $Mem_Free -lt 100 -a $Swap_used -gt 100 ];then
echo "$Date: $Hostname_Ip 内存可⽤量不⾜100M并且Swap空间占⽤超过100M,内存当前剩余: $Mem_Free,Swap空间使⽤达到: $Swap_used"
fi
sleep 5
done
3.磁盘监控实例
[root@zabbix ~]# vim /scripts/df.sh
#!/bin/bash
Hostname_Ip=$(hostname)_$(hostname -I|awk '{print $2}')
Date=$(date +%F)
while true
do
Disk_Used=$(df -h | awk '/\/$/ {print $5}')
if [ ${Disk_Used%\%} -gt 90 ];then
echo "$Date: $Hostname_Ip 磁盘可⽤量不⾜10%,当时已使⽤: $Disk_Used"
fi
sleep 5
done
4.监控nginx进程
#前⾯的课程中,我们学习了使⽤脚本+定时任务的⽅法⾃动备份并将检查结果,发到指定邮箱,那么这⾥,我也可以使⽤脚本+定时任务的⽅法,进⾏监控,并使⽤邮件报警#!/bin/bash
nginx_process=`ps -ef|grep -c [n]ginx`
if [ $nginx_process -lt 2 ];then
echo "⽬前nginx进程数是:$nginx_process"|mail -s "完犊⼦nginx挂了" ****@
fi
5.注意
#以上脚本监控,单台服务器或少量服务器可以使⽤,但是遇到⼤型架构服务器数量很多,使⽤该⽅法并不适⽤,所以我们要使⽤第三⽅⼯具进⾏监控 zabbix
zabbbix 1.0 ~ 5.0
zabbix 2.X #版本太⽼,功能低下
zabbix 3.X #改动很多,增加新功能很多
zabbix 4.X #没有太多改动
三、zabbix安装
1.zabbix架构
1.Zabbix agents 部署在被监控⽬标上,⽤于主动监控本地资源和应⽤程序,并将收集的数据发送给 Zabbix server
2.Zabbix server 是 Zabbix软件的核⼼组件,agent 向其报告可⽤性、系统完整性信息和统计信息。
server也是存储所有配置信息、统计信息和操作信息的核⼼存储库。
3.数据库:所有配置信息以及 Zabbix 采集到的数据都被存储在数据库中
4.zabbix web 为了从任何地⽅和任何平台轻松访问 Zabbix ,我们提供了基于 web 的界⾯。
该界⾯是 Zabbix server 的⼀部分,通常(但不⼀定)和 Zabbix server 运⾏在同⼀台物理机器上。
5.Zabbix proxy 可以代替 Zabbix server采集性能和可⽤性数据。
Zabbix proxy在Zabbix的部署是可选部分;但是proxy的部署可以很好的分担单个Zabbix server的负载。
2.配置官⽅源安装
1)配置官⽅源
[root@zabbix ~]# rpm -ivh /zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
[root@zabbix ~]# ll /etc/yum.repos.d/
total 12
-rw-r--r--. 1 root root 2523 Jul 6 22:19 CentOS-Base.repo
-rw-r--r--. 1 root root 664 Jul 6 22:19 epel.repo
-rw-r--r-- 1 root root 633 Oct 7 2019 zabbix.repo
2)开启仓库
#Zabbix 前端需要额外的基础安装包。
您需要在运⾏ Zabbix 前端的系统中启⽤可选 rpms 的软件仓库
#安装命令
[root@zabbix ~]# yum install -y yum-utils
[root@zabbix ~]# yum-config-manager --enable rhel-7-server-optional-rpms
Loaded plugins: fastestmirror
3)安装zabbix
[root@zabbix ~]# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent
3.第三⽅源安装
1)配置第三⽅源
[root@zabbix ~]# rpm -ivh https:///zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
2)安装zabbix
[root@zabbix ~]# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent
4.安装数据库
[root@zabbix ~]# yum install -y mariadb-server
5.配置数据库
[root@zabbix ~]# systemctl start mariadb
[root@zabbix ~]# systemctl enable mariadb
[root@zabbix ~]# mysql
MariaDB [(none)]> create database zabbix charset utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all on *.* to zabbix@'localhost' identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)
6.配置zabbix连接数据库
[root@zabbix ~]# grep "^DB" /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
7.导⼊初始数据库
[root@zabbix ~]# zcat /usr/share/doc/zabbix-server-mysql-4.0.24/create.sql.gz | mysql -u root -p zabbix
[root@zabbix ~]# mysql
MariaDB [(none)]> use zabbix
Database changed
MariaDB [zabbix]> show tables;
... ...
144 rows in set (0.00 sec)
8.启动zabbix服务
[root@zabbix ~]# systemctl start zabbix-server.service
[root@zabbix ~]# systemctl enable zabbix-server.service
9.启动httpd
#修改时区
[root@web02 ~]# vim /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai
[root@zabbix ~]# systemctl start httpd
[root@zabbix ~]# systemctl enable httpd
10.web页⾯访问zabbix
http://10.0.0.71/zabbix/index.php
#按照流程配置
#默认登录⽤户名密码:
Admin
zabbix
11.启动agent
[root@zabbix ~]# systemctl start zabbix-agent.service
四、监控⼀台远端主机
1.安装zabbix客户端
[root@web01 ~]# rpm -ivh https:///zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.1-1.el7.x86_64.rpm 2.配置客户端
[root@web01 ~]# grep ^Server /etc/zabbix/zabbix_agentd.conf
Server=172.16.1.71
ServerActive=172.16.1.71
Hostname=web01
3.启动客户端
[root@web01 ~]# systemctl start zabbix-agent.service
[root@web01 ~]# systemctl enable zabbix-agent.service
#验证启动
[root@web01 ~]# netstat -lntp
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 39529/zabbix_agentd
4.server端配置监控
1.添加主机组
2.创建主机
3.选择主机模板
4.添加主机
五、数据库拆分
1.环境准备
主机IP⾓⾊
zabbix172.16.1.71,10.0.0.71zabbix-server
db01172.16.1.51mysql
2.搭建新的数据库
[root@db01 ~]# yum install -y mariadb-server
3.授权数据库
[root@db01 ~]# systemctl start mariadb
[root@db01 ~]# systemctl enable mariadb
[root@db01 ~]# mysql
MariaDB [(none)]> grant all on *.* to zabbix@'172.16.1.%' identified by '123';
Query OK, 0 rows affected (0.00 sec)
4.导出源数据库数据
[root@zabbix ~]# mysqldump -B zabbix > /tmp/zabbix.sql
5.将数据导⼊新库
[root@zabbix ~]# mysql -uzabbix -p -h172.16.1.51 < /tmp/zabbix.sql
Enter password:
6.修改zabbix连接数据库配置
[root@zabbix ~]# grep "^DB" /etc/zabbix/zabbix_server.conf
DBHost=172.16.1.51
DBName=zabbix
DBUser=zabbix
DBPassword=123
7.修改zabbix-web端数据库配置
[root@zabbix ~]# vim /etc/zabbix/web/zabbix.conf.php
<?php
// Zabbix GUI configuration file.
global $DB;
$DB['TYPE'] = 'MYSQL';
#修改数据库地址
$DB['SERVER'] = '172.16.1.51';
$DB['PORT'] = '0';
$DB['DATABASE'] = 'zabbix';
$DB['USER'] = 'zabbix';
#修改远程连接密码
$DB['PASSWORD'] = '123';
// Schema name. Used for IBM DB2 and PostgreSQL.
$DB['SCHEMA'] = '';
$ZBX_SERVER = 'localhost';
$ZBX_SERVER_PORT = '10051';
$ZBX_SERVER_NAME = 'Linux脱产9期';
$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
8.重启访问
[root@zabbix ~]# systemctl restart zabbix-server.service 9.停⽌旧库
[root@zabbix ~]# systemctl stop mariadb。