Zabbix基础介绍及搭建

zabbix

一、监控基本概述#

1.什么是监控?

Copy
1.监控系统是整个运维环节,乃至整个产品生命周期中最重要的一环 2.事前及时预警发现故障 3.事后提供详细的数据用于追查定位问题

2.为什么要做监控?

Copy
1.系统的监控:实际上是对系统不间断的实时监控 2.实时反馈系统当前状态:我们监控某个硬件、或者某个系统,都是需要能实时看到当前系统的状态,是正常、异常、或者故障。 3.保证服务可靠性安全性:我们监控的目的就是要保证系统、服务、业务正常运行 4.保证业务持续稳定运行:如果我们的监控做得很完善,即使出现故障,能第一时间接收到故障报警,在第一时间处理解决,从而保证业务持续性的稳定运行。(往往,第一时间知道业务宕机的都是用户)

3.主要的监控工具

Copy
1.CACTI:网络监控,Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具 2.NAGIOS:系统监控,很久之前使用的,需要人为定义,没有图形,没有办法查询历史 3.ZABBIX:分布式监控 4.open-falcon:小米监控产品,开源的 5.premethous:普罗米修斯,监控docker,K8S 6.lepus:天兔,数据库监控

4.怎么监控

Copy
1.查看内存使用 free -m 2.取出监控的值 3.对比某个限制的值 4.如果超过限制的值则告警

5.监控的内容

Copy
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

Copy
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)监控内存

Copy
free glances top htop

3)监控磁盘

Copy
df glances iotop iostat dstat #以兆为单位,每秒执行一次,执行10次 [root@web02 ~]# iostat -dm 1 10

4)网络监控

Copy
glances ifconfig iftop ip route nethogs 该命令可以查看某个进程所使用的流量

5)TCP11种状态监控命令

Copy
netstat -ant ss -ant

2.监控内存实例#

1)需求

Copy
每1分钟监控当前系统的内存使用状态,如果可用低于100MB则发送邮件。同时打印当前还剩余多少内存 #思路 1.如何获取内存的状态信息 free -m 2.如何获取内存的可用状态 free -m|awk '/Mem/{print $NF}' 3.如何进行数字的比对,高于100MB不处理,低于100MB,发送邮件。 4.如何每分钟执行。

2)监控脚本

Copy
[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)思考

Copy
随着时间的推移,用户不断增多,服务消耗的内存越来越多,当系统内存不足的时候,可能会导致系统产生oom(out of memory) 1.当系统内存不足时就会大量使用swap(虚拟内存) 2.当系统大量使用swap的时候,系统会特别卡 注意:有时可能内存还有剩余300M或者500M,但是swap依然被使用

4)新脚本

Copy
[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.磁盘监控实例

Copy
[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进程

Copy
#前面的课程中,我们学习了使用脚本+定时任务的方法自动备份并将检查结果,发到指定邮箱,那么这里,我也可以使用脚本+定时任务的方法,进行监控,并使用邮件报警 #!/bin/bash nginx_process=`ps -ef|grep -c [n]ginx` if [ $nginx_process -lt 2 ];then echo "目前nginx进程数是:$nginx_process"|mail -s "完犊子nginx挂了" ****@qq.com fi

5.注意

Copy
#以上脚本监控,单台服务器或少量服务器可以使用,但是遇到大型架构服务器数量很多,使用该方法并不适用,所以我们要使用第三方工具进行监控 zabbix zabbbix 1.0 ~ 5.0 zabbix 2.X #版本太老,功能低下 zabbix 3.X #改动很多,增加新功能很多 zabbix 4.X #没有太多改动

三、zabbix安装#

1.zabbix架构

Copy
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)配置官方源

Copy
[root@zabbix ~]# rpm -ivh http://repo.zabbix.com/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)开启仓库

Copy
#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

Copy
[root@zabbix ~]# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent

3.第三方源安装

1)配置第三方源

Copy
[root@zabbix ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm

2)安装zabbix

Copy
[root@zabbix ~]# yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent

4.安装数据库

Copy
[root@zabbix ~]# yum install -y mariadb-server

5.配置数据库

Copy
[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连接数据库

Copy
[root@zabbix ~]# grep "^DB" /etc/zabbix/zabbix_server.conf DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword=zabbix

7.导入初始数据库

Copy
[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服务

Copy
[root@zabbix ~]# systemctl start zabbix-server.service [root@zabbix ~]# systemctl enable zabbix-server.service

9.启动httpd

Copy
#修改时区 [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

Copy
http://10.0.0.71/zabbix/index.php #按照流程配置 #默认登录用户名密码: Admin zabbix

11.启动agent

Copy
[root@zabbix ~]# systemctl start zabbix-agent.service

四、监控一台远端主机#

1.安装zabbix客户端

Copy
[root@web01 ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.1-1.el7.x86_64.rpm

2.配置客户端

Copy
[root@web01 ~]# grep ^Server /etc/zabbix/zabbix_agentd.conf Server=172.16.1.71 ServerActive=172.16.1.71 Hostname=web01

3.启动客户端

Copy
[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端配置监控

Copy
1.添加主机组 2.创建主机 3.选择主机模板 4.添加主机

五、数据库拆分#

1.环境准备

主机 IP 角色
zabbix 172.16.1.71,10.0.0.71 zabbix-server
db01 172.16.1.51 mysql

2.搭建新的数据库

Copy
[root@db01 ~]# yum install -y mariadb-server

3.授权数据库

Copy
[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.导出源数据库数据

Copy
[root@zabbix ~]# mysqldump -B zabbix > /tmp/zabbix.sql

5.将数据导入新库

Copy
[root@zabbix ~]# mysql -uzabbix -p -h172.16.1.51 < /tmp/zabbix.sql Enter password:

6.修改zabbix连接数据库配置

Copy
[root@zabbix ~]# grep "^DB" /etc/zabbix/zabbix_server.conf DBHost=172.16.1.51 DBName=zabbix DBUser=zabbix DBPassword=123

7.修改zabbix-web端数据库配置

Copy
[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.重启访问

Copy
[root@zabbix ~]# systemctl restart zabbix-server.service

9.停止旧库

Copy
[root@zabbix ~]# systemctl stop mariadb
posted @   元气少女郭德纲!!  阅读(532)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 对象分配(Alloc)底层原理浅谈
· 聊一聊 C#异步 任务延续的三种底层玩法
· 敏捷开发:如何高效开每日站会
· 为什么 .NET8线程池 容易引发线程饥饿
· golang自带的死锁检测并非银弹
阅读排行:
· 欧阳的2024年终总结,迷茫,重生与失业
· 聊一聊 C#异步 任务延续的三种底层玩法
· 上位机能不能替代PLC呢?
· 2024年终总结:5000 Star,10w 下载量,这是我交出的开源答卷
· .NET Core:架构、特性和优势详解
点击右上角即可分享
微信分享提示
CONTENTS