Zabbix监控搭建详细过程
1、Zabbix监控搭建详细过程
一、?Why?什么是监控,为什么需要监控
1、监控概述
官方说明:
监控
是指对行为、活动或其他变动中信息的一种持续性关注,通常是为了对人达成影响、管理、指导或保护的目的。
- 监控
- 监视主机,架构状态
- 控制,事后追责
- 目标:早发现早处理,(故障、性能、架构)网站扩容(用数据说话)
- eg:随着用户的增多,服务随时可能会被oom(Out of Memory)
2、监控课程大纲
- [x] 监控与命令
- [x] 面试题:
你们公司监控了什么内容
- [x] 监控通用架构
- [x] 监控生产最佳实战
- [x] 监控设备
- [x]
自定义监控
- [x]
自定义监控进阶与故障案例
- [x] 监控与告警 邮件 微信 短信 电话 钉钉 调取api接口
- [x] 监控之886-Zabbix-agent2
- [x] agent:通用
- [x] snmp:网络设备、带宽和流量
- [x] jmx(java gateway tomcat)
- [x] ipmi
- [x] 自动化监控
- [x] 自动发现
- [x] 自动注册
- [x] 主动与被动
- [x] 分布式监控proxy:多个机房、多个地区监控
- [x] 监控终极挑战
- [x] 自动获取对应服务的端口,按照指定格式显示
- [x] zabbix客户端,创建自动发现key
- [x] 创建自定义监控项
- [x] web页面操作,添加监控项原型
- [x] web页面操作,添加触发器原型
- [x] web页面操作,添加图形原型
- [x] 启用自动发现规则
- [x] lld 低级自动发现:自动获取、添加监控项,触发器,图形,Mysql多实例,tomcat多实例
- [x] Zabbix内置:自动发现网卡、磁盘分区、硬盘、CPU
- [x] 手动创建lld:(端口)
- [x] Zabbix api
- [x] 全网监控项目
- [x] Zabbix与提升
- [x] grafana
- [x] 补充
二、Linux的那些独孤九剑级别的命令
项目 | 对应检查命令 |
---|---|
网站/api | curl / wget |
服务 | systemctl / service / chkconfig(c6) |
进程 | ps/ pstree / pgrep / pidstat / top / htop |
CPU | top / htop / vmstat / mpstat / lscpu / cpuinfo / w / uptime / sar |
内存 | top / free / ps / iotop(swap) / vmstat / sar / hcache(buffer+cache) |
磁盘 | iotop / iostat / sar #磁盘测试命令 dd ,flo |
网络 | iftop(整体带宽使用情况) / nethogs(精确到进程) / nstat/ ifstat / mtr / sar |
硬件 | Meagcli(raid) / ipmitool(温度、cpu风扇转速) / Im_sensors(温度) |
#进程
pgrep 过滤出指定服务的进程pid # ps -ef |grep pid
## pidstat
#
#cpu
三、企业面试题:你们公司监控如何做的? 等同于:你们公司监控了什么?
1、初级回答
cpu、内存、磁盘、网卡、进程、服务......
2、必备回答
分层次、框架、避免问什么回答什么
- 单台机器
业务(应用/API)信息
:应用、程序代码是否有问题,(需要我们与开发沟通,书写一个页面) eg:lnmp时候的 php与mysql测试页面。服务信息
:各种服务的进程,端口,状态,特定的信息(不同服务)系统信息
:cpu,内存(内存,swap,buffer / cache),磁盘(io,使用率,inode),负载,网络(in / out).......硬件信息
:磁盘,raid状态,温度,风扇转速。#机房温度、湿度。- 网站集群监控(用户访问流程)
- 任性不差钱:全国各地(核心城市),1台服务器,在服务器访问你们源站/ cdn / dns,(对应的服务:smokeping)
- 免费:http://17ce.com http://ping.chinaz.com 测试工具:http://cesule.tingyun.com/cesule/home
- 商业:听云、监控宝(告警)
- DNS解析:ping / dig / nslookup / host
- DNS解析域CDN是否ok
本质:通过全局访问测试工具(模仿用户在全国(全球)各地访问我们的网站)
- TCP三次握手(并发数) -网站负载均衡监控 ss -ant
- HTTP请求报文 - 监控web日志查看(状态码) 补充:加上HTTPS监控过期
- 请求经过网站架构
- 负载均衡(Nginx)
- web服务器(php、tomcat...)
- 缓存
- 数据库
- 存储
- HTTP响应报文 - 监控web日志查看(状态码)
- TCP四次挥手 - 网站负载均衡监控 ss -ant
- 断开连接
四、监控的脚本时代 -过去式
#脚本取出内存使用率
cat /server/scripts/check_mem.sh
#!/bin/bash
# author: lidao993
# desc: check system memory usage
MEM= `free -m|awk 'NR==2{print $NF}'`
if [$MEN -le 100 ];then
echo "当前内存还剩余 $MEM"| mail -s '内存不足了!oom' yunwei_linux@qq.com
fi
五、监控的现代时
阶段
过去: Nagios(难够死) + Cacti
目前: Zabbix + Grafana,Openfalcon(小米),Prometheus(普罗米休斯)
未来: Zabbix 6.0 / 7.0 lts?, someting new ??
六 、Zabbix监控架构
1、生命周期
LTS(Long TIme Support)
2、Zabbix监控架构
Zabbix是一个CS(服务端 / 客户端) 架构服务
Zabbix-Agent 获取数据
发送给 -->Zabbix-Server服务端
-->数据会被存放到数据库
<--Zabbix web 页面展示数据
采集数据 --> 数据收集、数据分析、报警 --> 存储 --> 友好的展示
七、Zabbix生产快速实践指南
1、主机规划
规模 | 平台 | CPU/内存 | 数据库 | 受监控的主机数量 |
---|---|---|---|---|
小型 | CentOS | Virtual Appliance | MySQL LnnoDB | 100 |
中型 | CentOS | 2 CPU cores / 2GB | MySQL LnnoDB | 500 |
大型 | RedHat Enterprise Linux | 4 CPU cores / 8GB | RAID MySQL LnnoDB 或PostgreSQL | >1000 |
极大型 | RedHat Enterprise Linux | 8 CPU cores /16GB | Fast RAID10 MySQL LnnoDB 或PostgreSQL | >10000 |
角色 | 主机名 | IP | 配置 |
---|---|---|---|
Zabbix服务端 | zabbix | 192.168.2.12 | 1C1G |
Zabbix客户端 | web | 192.168.2.5 | 1C1G |
2、企业Zabbix安装最佳实战-CentOS7
(1)安装方式
1、极速全自动安装 yum
2、混合安装 yum+自定义配置(最佳实践):LNMP(yum)、zabbix-server(yum)、zabbix-web环境(源码包)
3、Docter
4、源码编译安装
(2)Nginx 安装
# 使用官方仓库安装Nginx
[root@Zabbix ~]# cat /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
#安装Nginx,启动并加入开机自启。
[root@Zabbix ~]# yum -y install nginx
[root@Zabbix ~]# systemctl start nginx
[root@Zabbix ~]# systemctl enable nginx
(3)PHP安装
# php7.2
[root@Zabbix ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@Zabbix ~]# yum install epel-release.noarch -y #webtatic要求
[root@Zabbix ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@Zabbix ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm #webtatic源
[root@Zabbix ~]# yum install php72w-cli php72w-fpm php72w-gd php72w-mbstring php72w-bcmath php72w-xml php72w-ldap php72w-mysqlnd -y
[root@Zabbix ~]# rpm -qa|egrep 'nginx|php72w'
php72w-ldap-7.2.34-1.w7.x86_64
php72w-pdo-7.2.34-1.w7.x86_64
php72w-xml-7.2.34-1.w7.x86_64
php72w-bcmath-7.2.34-1.w7.x86_64
php72w-gd-7.2.34-1.w7.x86_64
php72w-cli-7.2.34-1.w7.x86_64
nginx-1.22.0-1.el7.ngx.x86_64
php72w-common-7.2.34-1.w7.x86_64
php72w-fpm-7.2.34-1.w7.x86_64
php72w-mbstring-7.2.34-1.w7.x86_64
php72w-mysqlnd-7.2.34-1.w7.x86_64
(4)Nginx-PHP配置
# nginx配置
[root@Zabbix ~]# cat /etc/nginx/conf.d/zabbix.conf
server {
listen 80;
server_name zabbix.zxc.com;
root /code/zabbix;
location / {
index index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
# 根据nginx中定义的内容,创建站点目录
[root@Zabbix ~]# mkdir /code/zabbix
[root@Zabbix ~]# chmod -R 755 /code
[root@Zabbix ~]# vim /code/zabbix/info.php
<?php
phpinfo();
?>
#注意:如果没有该用户,启动一定会报错
[root@Zabbix ~]# groupadd -g 666 www
[root@Zabbix ~]# useradd -u666 -g666 www
#修改nginx与php-fpm管理进程,的运行身份为www
[root@Zabbix ~]# sed -i '/^user /c user www;' /etc/nginx/nginx.conf
[root@Zabbix ~]# sed -i '/^user/c user = www' /etc/php-fpm.d/www.conf
[root@Zabbix ~]# sed -i '/^group/c group = www' /etc/php-fpm.d/www.conf
#最后授权代码为www
[root@Zabbix ~]# chown -R www.www /code/zabbix
#启动并加入开机自启
[root@Zabbix ~]# systemctl enable nginx php-fpm.service
[root@Zabbix ~]# systemctl start nginx php-fpm.service
[root@Zabbix ~]# nginx -t
(5)zabbix和数据库安装
zabbix官方源zabbix清华源
# 下载zabbix源
[root@Zabbix ~]# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
# 替换成国内源--清华源
[root@Zabbix ~]# sed 's#http://repo.zabbix.com/zabbix/5.0/rhel/7/$basearch/#https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.0/rhel/7/x86_64/#g' /etc/yum.repos.d/zabbix.repo
[root@Zabbix ~]# sed -i 's#http://repo.zabbix.com/zabbix/5.0/rhel/7/$basearch/#https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.0/rhel/7/x86_64/#g' /etc/yum.repos.d/zabbix.repo
#安装zabbix-server、zabbix-agent2 mariadb(可替换为MySQL,安装参考 https://mp.weixin.qq.com/s/oe6rddOHFjSSgIBYFvYYhg)
[root@Zabbix ~]# yum -y install mariadb-server zabbix-server-mysql zabbix-agent2
#启动服务并加入开机自启
[root@Zabbix ~]# systemctl enable mariadb.service zabbix-server.service zabbix-agent2.service
(6)配置数据库
#先配置数据库
[root@Zabbix ~]# systemctl start mariadb.service
# 查看数据库和当前用户
[root@Zabbix ~]# mysql
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+
4 rows in set (0.00 sec)
MariaDB [(none)]> select user,host from mysql.user;
+------+-----------------------+
| user | host |
+------+-----------------------+
| root | 127.0.0.1 |
| root | ::1 |
| | localhost |
| root | localhost |
| | zabbix-11.localdomain |
| root | zabbix-11.localdomain |
+------+-----------------------+
6 rows in set (0.00 sec)
# 安全配置数据库
[root@Zabbix ~]# mysql_secure_installation
# 输入你mysql的root密码,如果没有直接enter回车
Enter current password for root (enter for none): Enter
# 设置root密码
Set root password? [Y/n] y
New password: P@ssw0rd
Re-enter new password: P@ssw0rd
# 是否删除匿名用户
Remove anonymous users? [Y/n] y
# 是否不允许远程登录
Disallow root login remotely? [Y/n] n
# 删除测试数据库并访问它
Remove test database and access to it? [Y/n] y
# 现在重新加载权限表
Reload privilege tables now? [Y/n] y
Thanks for using MariaDB!
# 创建zabbix数据库
[root@Zabbix ~]# mysql -uroot -pP@ssw0rd
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
# 授权给zabbix用户
MariaDB [(none)]> grant all on zabbix.* to 'zabbix'@'localhost' identified by 'zabbix';
#初始化数据库,导入默认的数据库
[root@Zabbix ~]# rpm -ql zabbix-server-mysql
/etc/logrotate.d/zabbix-server
/etc/zabbix/zabbix_server.conf
/usr/lib/systemd/system/zabbix-server.service
/usr/lib/tmpfiles.d/zabbix-server.conf
/usr/lib/zabbix/alertscripts
/usr/lib/zabbix/externalscripts
/usr/sbin/zabbix_server_mysql
/usr/share/doc/zabbix-server-mysql-5.0.26
/usr/share/doc/zabbix-server-mysql-5.0.26/AUTHORS
/usr/share/doc/zabbix-server-mysql-5.0.26/COPYING
/usr/share/doc/zabbix-server-mysql-5.0.26/ChangeLog
/usr/share/doc/zabbix-server-mysql-5.0.26/NEWS
/usr/share/doc/zabbix-server-mysql-5.0.26/README
/usr/share/doc/zabbix-server-mysql-5.0.26/create.sql.gz
/usr/share/doc/zabbix-server-mysql-5.0.26/double.sql
/usr/share/man/man8/zabbix_server.8.gz
/var/log/zabbix
/var/run/zabbix
# 导入默认zabbix数据库数据
[root@Zabbix ~]# zcat /usr/share/doc/zabbix-server-mysql-5.0.26/create.sql.gz |mysql -uzabbix -pzabbix zabbix
(7)配置zabbix
#zabbix 服务端 配置连接数据库
[root@Zabbix ~]# vim /etc/zabbix/zabbix_server.conf
[root@Zabbix ~]# grep ^DB /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
# 创建php会话目录并授权
[root@Zabbix ~]# grep session /etc/php-fpm.d/www.conf
; (error_log, sessions.save_path, ...).
; Set session path to a directory owned by process user
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
[root@Zabbix ~]# mkdir -p /var/lib/php/session
[root@Zabbix ~]# chown www.www /var/lib/php/session
#重启zabbix服务端
[root@Zabbix ~]# systemctl restart zabbix-server
#zabbix服务端端口10051,客户端10050
(8)zabbix-web页面部署
下载zabbix程序
# 下载完之后上传到服务器
# 解压 zabbix-5.0.26.tar.gz
[root@Zabbix ~]# tar -xf zabbix-5.0.26.tar.gz
[root@Zabbix ~]# cd zabbix-5.0.26
#复制到/code/zabbix/下
[root@Zabbix zabbix-5.0.26]# cp -r ui/* /code/zabbix/
# 访问 zabbix.zxc.com
# 发现php报错
PHP option "post_max_size" 8M 16M Fail
PHP option "max_execution_time" 30 300 Fail
PHP option "max_input_time" 60 300 Fail
PHP option "date.timezone" unknown Fail
# 在/etc/php.ini中修改
[root@Zabbix ~]# egrep '^post_max|max_execution|max_input|date.time' /etc/php.ini
max_execution_time = 300
max_input_time = 600
post_max_size = 200M
date.timezone = Asia/Shanghai
#重启php
[root@Zabbix ~]# systemctl restart php-fpm
#web默认登入账号密码:
#账号:Admin
#密码:zabbix
运维库