
Zabbix监控快速搭建
1.监控知识基本概述
1.为什么要使用监控
- 1.对系统不间断实时监控
- 2.实时反馈系统当前状态
- 3.保证服务可靠性安全性
- 4.保证业务持续稳定运行
2.如何进行监控,比如我们需要监控磁盘的使用率
- 1.如何查看磁盘使用率df -h
- 2.监控磁盘的那些指标block、inode
- 3.如何获取具体的信息df -h|awk '//$/{print $(NF-1)}'
- 4.获取的数值到达多少报警 80%
3.流行的监控工具
- 1.cacti、Nagios、Zabbix、
- 2.Lepus(天兔)数据库监控系统
- 3.Open-Falcon 小米
- 4.Prometheus(普罗米修斯,Docker、K8s)
4.如果去到一家新公司,如何入手监控
- 1.硬件监控 路由器、交换机、防火墙
- 2.系统监控 CPU、内存、磁盘、网络、进程、TCP
- 3.服务监控 nginx、php、tomcat、redis、memcache、mysql
- 4.WEB监控 请求时间、响应时间、加载时间、
- 5.日志监控 ELk(收集、存储、分析、展示) 日志易
- 6.安全监控 Firewalld、WAF(Nginx+lua)、安全宝、牛盾云、安全狗
- 7.网络监控 smokeping 多机房
- 8.业务监控 活动引入多少流量、产生多少注册量、带来多大价值
2.单机时代如何监控
1.监控命令参考文档 http://man.linuxde.net/par/3
- free
- df
- tophtop
- uptime
- iftop
- vmstat
- netstat
- netstat -anp
- nethogs
1.[root@zabbixserver ~]# cat /proc/uptime 4729.30 4662.68 启动时间 运行时间 2.CPU监控命令: w、top、htop、glances %Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st us 用户态: 跟用户的操作有关 35% sy 系统态: 跟内核的处理有关 60% id CPU空闲: 3.内存监控命令: free [root@ZabbixServer ~]# free -m total used free shared buff/cache available Mem: 974 440 194 4 340 328 Swap: 2047 11 2036 4.磁盘监控命令: df、iotop Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 0.80 25.32 33.36 221034 291193 设备名 每秒传输次数 每秒读大小 每秒写大小 读的总大小 写的总大小 5.网络监控命令: ifconfig、route、glances、iftop、nethogs、netstat 单位换算 Mbps 100Mbps/8 MB 12MB iftop 中间的<= =>这两个左右箭头,表示的是流量的方向。 TX:发送流量、RX:接收流量、TOTAL:总流量 6.查看TCP11中状态 netstat -an|grep ESTABLISHED netstat -rn # 查看路由信息 netstat -lntup2.随着时间的推移,用户不断的增多,服务随时可能扛不住会被oom(out of memory),当系统内存不足的时候,会触发oom
- 1.当系统内存不足的时候就会大量使用swap
- 2.当系统大量使用swap的时候,系统会特别卡
注意: 有时可能内存还有剩余300Mb-500Mb,但会发现swap依然被使用
[root@ZabbixServer ~]# dd if=/dev/zero of=/dev/null bs=800M [root@ZabbixServer ~]# tail -f /var/log/messages Out of memory: Kill process 2227 (dd) score 778 or sacrifice child Killed process 2227 (dd) total-vm:906724kB, anon-rss:798820kB, file-rss:0kB3.僵尸进程如何解决
僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等。 但是仍然为其保留一定的信息(包括进程号the process ID,退出状态the termination status of the process,运行时间the amount of CPU time taken by the process等)。直到父进程通过wait / waitpid来取时才释放。 但这样就导致了问题,如果进程不调用wait / waitpid的话, 那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。
从系统角度来说,处理僵尸进程有两种方法:1找到僵死进程的父进程,kill掉父进程,那么僵死进程将变为孤儿进程,孤儿进程在系统中由init进程接管,init进程将回收僵死进程的资源
2 reboot系统,因为僵死进程是不可以被kill掉4.那单机时代,如何使用shell脚本来实现服务器的监控
需求: 每隔1分钟监控一次内存,当你的可用内存低于100m,发邮件报警,要求显示剩余内存
- 1.怎么获取内存可用的值free -m|awk '/^Mem/{print $NF}'
- 2.获取到内存可用的值如何和设定的阈值进行比较
- 3.比较如果大于100m则不处理,如果小于100则报警
- 4.如何每隔1分钟执行一次
[root@ZabbixServer ~]# cat free.sh #!/usr/bin/bash HostName=$(hostname)_$(hostname -i) Date=$(date +%F) while true;do Free=$(free -m|awk '/^Mem/{print $NF}') if [ $Free -le 100 ];then echo "$Date: $HostName Mem Is < ${Free}MB" fi sleep 5 done
3.zabbix监控快速安装
1.配置Zabbix仓库
[root@zabbix-server ~]# https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm2.安装Zabbix程序包,以及MySQL、Zabbix-agent
[root@zabbix-server ~]# yum install -y zabbix-server-mysql zabbix-web-mysql zabbix-agent mariadb-server3.创建Zabbix数据库以及用户
[root@zabbix-server ~]# mysql -uroot -p MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin; MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';4.导入Zabbix数据至数据库中
[root@zabbix-server ~]# cd /usr/share/doc/zabbix-server-mysql-3.4.12/ [root@linux-node1 zabbix-server-mysql-3.4.12]# zcat create.sql.gz |mysql -uroot zabbix5.编辑/etc/zabbix/zabbix_server.conf文件,修改数据库配置
[root@zabbix-server ~]# grep ^[a-Z] /etc/zabbix/zabbix_server.conf .... DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword=zabbix ....6.启动Zabbix服务进程,并加入开机自启
[root@zabbix-server ~]# systemctl start zabbix-server [root@zabbix-server ~]# systemctl enable zabbix-server7.配置Apache的配置文件/etc/httpd/conf.d/zabbix.conf,修改时区。
[root@zabbix-server ~]# vim /etc/httpd/conf.d/zabbix.conf php_value max_execution_time 300 php_value memory_limit 128M php_value post_max_size 16M php_value upload_max_filesize 2M php_value max_input_time 300 php_value always_populate_raw_post_data -1 #取消注释,设置正确的时区 php_value date.timezone Asia/Shanghai8.重启Apache Web服务器
[root@zabbix-server ~]# systemctl start httpd欢迎界面, 直接下一步即可
检查依赖项是否不存在任何异常
配置zabbixWeb连接数据库
配置ZabbixServer服务器的主机名或主机IP地址和端口号, 以及安装的名称(可选)
安装前摘要,检查配置参数。如果一切都正确,请按"下一步"按钮或"后退"按钮来更改配置参数。
提示已成功地安装了Zabbix前端。配置文件/etc/zabbix/web/zabbix.conf.php被创建。
默认登陆ZabbixWeb的用户名Admin,密码zabbix
至此Zabbix已经安装完毕
4.Zabbix监控基础架构
zabbix-agent(数据采集)-->zabbix-server(数据分析|报警)--> 数据库(数据存储)<--zabbix web(数据展示)
Zabbix单台时代: LNMP+Zabbix
Zabbix数据拆分: LAP+MySQL(修改如下两个文件中连接数据库的配置信息)[root@ZabbixServer ~]# ll /etc/zabbix/zabbix_server.conf [root@ZabbixServer ~]# ll /etc/zabbix/web/zabbix.conf.phpZabbix拆分数据库实践
角色 外网IP(NAT) 内网IP(LAN) Zabbix-Server eth0:10.0.0.71 eth1:172.16.1.71 MySQL eth0:10.0.0.51 eth1:172.16.1.51 1.在新的数据库上创建zabbix库
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to zabbix@'%' identified by 'Bgx123.com';
2.在旧的zabbix服务器上备份数据库文件[root@ZabbixServer ~]# mysqldump -uroot
--databases zabbix
--single-transaction >date +%F%H-zabbix.sql
3.将备份的数据库通过远程的方式导入新数据库中[root@ZabbixServer ~]# cat 2018-08-2017-zabbix.sql |mysql -h 172.16.1.51 -uzabbix -pBgx123.com zabbix
4.修改zabbixServer的数据库连接信息[root@ZabbixServer ~]# vim /etc/zabbix/zabbix_server.conf
DBHost=172.16.1.51
DBName=zabbix
DBUser=zabbix
DBPassword=Bgx123.com
[root@ZabbixServer ~]# systemctl restart zabbix-server
5.修改zabbixWeb连接数据库信息[root@ZabbixServer ~]# vim /etc/zabbix/web/zabbix.conf.php $DB['TYPE'] = 'MYSQL'; $DB['SERVER'] = '172.16.1.51'; $DB['PORT'] = '0'; $DB['DATABASE'] = 'zabbix'; $DB['USER'] = 'zabbix'; $DB['PASSWORD'] = 'Bgx123.com'; [root@ZabbixServer ~]# systemctl restart httpd # 如出现如下错误:请检查数据库是否允许远程连接,对应的账户和密码是否配置错误 [root@ZabbixServer ~]# tail -f /var/log/zabbix/zabbix_server.log 2189:20180820:173636.941 [Z3001] connection to database 'zabbix' failed: [2003] Can't connect to MySQL server on '172.16.1.51' (111)5.zabbix快速监控主机
角色 外网IP(NAT) 内网IP(LAN) Zabbix-Server eth0:10.0.0.71 eth1:172.16.1.71 MySQL eth0:10.0.0.7 eth1:172.16.1.7 1.安装Zabbix-Agent
[root@web01 ~]# rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.8-1.el7.x86_64.rpm2.配置Zabbix-Agent指向Zabbix-Server
[root@web01 ~]# vim /etc/zabbix/zabbix_agentd.conf Server=172.16.1.713.启动Zabbix-Agent, 默认监听在10050端口
[root@web01 ~]# systemctl start zabbix-agent [root@web01 ~]# systemctl enable zabbix-agent [root@web01 ~]# netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 1103/zabbix_agentd4.配置ZabbixWeb页面,点击配置->选择主机->创建主机
5.点击模板->选择连接指示器->选择->搜索Linux->点击小按钮添加->最后添加
6.zabbix自定义监控初试
如何获取想要监控对象的值,又如何将数据传递给zabbix
1.监控系统中的对象(系统监控命令 + awk + 筛选条件 = 状态值) iostat | awk '/^sda/{print $2}'2.在ZabbixAgent的/etc/zabbix/zabbix_agentd.d/目录中新增监控项, 使用UserParameter=,
[root@web01 ~]# cat /etc/zabbix/zabbix_agentd.d/iotop.conf UserParameter=iotps,iostat | awk '/^sda/{print $2}' [root@web01 ~]# systemctl restart zabbix-agent3.在ZabbixAgent客户端测试设置的监控项是否正常,使用zabbix_agentd -p | grep KEY检测是否能获取到对应的值
[root@web01 ~]# zabbix_agentd -p |grep iotps iotps [t|1.72]4.在ZabbixServer端测试获取ZabbixAgent端自定义的监控项是否正常zabbix_get -s IP_addr -k KEY
[root@ZabbixServer ~]# yum install zabbix-get -y [root@ZabbixServer ~]# zabbix_get -s 10.0.0.9 -p10050 -k iotps 1.695.在ZabbixWeb前端界面进行关联展示
- 1.点击配置->主机->对应主机->监控项->创建监控项->名称->键值(监控项目名称)->信息类型->单位
- 2.点击监测中->最新数据->等待数据
6.在Zabbix中执行命令的是普通用户,给普通用户增加执行命令的权限
6.自定义阈值(到达预设的瓶颈)
- 1.选择配置->主机->对应主机->触发器->创建触发器->名称->
表达式一定要选择对应的监控项进行设定({web03-10.0.0.9:system.users.num.last()}>2)->确认7.验证Zabbix报警
- 1.开启多个会话窗口,测试前端报警
- 2.前端Zabbix面板报警开启方式->右上角小人头->正在发送消息->开启即可











