1.硬件监控。 通过SNMP来进行路由器交换机的监控(这些可以跟一些厂商沟通来了解如何做)、 服务器的温度以及其他,可以通过IPMI来实现。当然如果没有硬件全都是云,直接跳过这一步骤。
2.系统监控。 如CPU的负载,上下文切换、内存使用率、磁盘读写、磁盘使用率、磁盘inode节点。 当然这些都是需要配置触发器,因为默认太低会频繁报警。
3.服务监控。 比如公司用LNMP nginx自带Status模块、PHP也有相关的Status、 MySQL的话可以通过percona来进行监控。Redis这些通过自身的info获信息进行过滤等。 方法都类似。要么服务自带。要么通过脚本来实现想监控的内容,以及报警和图形功能。
4.网络监控。 如果是云主机又不是跨机房,那么可以选择不监控网络。当然你说我们是跨机房以及如何如何。 推荐使用smokeping来做网络相关的监控。或者直接交给你们的网络工程师来做。因为术业有专攻。
5.安全监控。 如果是云主机可以考虑使用自带的安全防护。当然也可以使用iptables。 如果是硬件,那么推荐使用硬件防火墙。使用云可以购买防DDOS,避免出现故障导致down机一天。 如果是系统,那么权限、密码、备份、恢复基础的方案要做好。 web同时也可以使用nginx+waf来实现一个web层面的防火墙。当然也可以使用集成好的openresty。
6.Web监控。 web监控的话题其实还是很多。比如可以使用自带的web监控来监控页面相关的延迟、 js响应时间、下载时间、等等。这里我推荐使用专业的商业软件, 听云来做这一块。毕竟人家全国各地都有机房。 (如果本身是多机房那就另说了)
7.日志监控。 如果是web的话可以使用监控Nginx的500x日志。 PHP的ERROR日志。其实这些需求无非是,收集、存储、查询、 展示,我们其实可以使用开源的ELKstack来实现。ogstash(收集)、 elasticsearch(存储+搜索)、kibana(展示)
8.业务监控。 我们上面做了那么多,其实最终还是保证业务的运行。 这样我们做的监控才有意义。所以业务层面这块的监控需要和开发以及总监开会讨论, 监控比较重要,如API、等。(需要开会确认)然后通过简单的脚本就可以实现, 最后设置触发器即可
9.流量分析。 平时我们分析日志都是拿awk sed xxx一堆工具来实现。 这样对我们统计ip、pv、uv不是很方便。那么可以使用百度统计、 google统计、商业,让开发嵌入代码即可。当然避免隐私也可以使用 piwiki来做相关的流量分析。
10.可视化。 通过screen以及引入一 些第三方的库来美化界面,同时我们也需要知道、订单量突然增加、 突然减少。或者说突然来了一大波流量,这流量从哪儿来,是不是推广了, 还是被攻击了。可以结合监控平来来梳理各个系统之间的业务关系。
11.自动化监控。 如上我们做了那么多的工作,当然不能是一台一台的来加key实现。 可以通过Zabbix的主动模式以及被动模式来实现。当然最好还是通过API来实现。
准备:两个centos7虚拟机,一个作为zabbix-server,另一个作为zabbix-agent
需要安装:Apache+MySQL+Php+zabbix-server、zabbix-agent等
#vim /etc/selinux/config #将SELINUX=enforcing改为SELINUX=disabled #或使用: #sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config #getenforce #Disabled 为关闭(临时关闭) #setenforce 0 #设置SELinux 成为enforcing模式(永久关闭) #systemctl stop firewalld.service 停止防火墙 #systemctl disable firewalld.service禁止firewall开机启动
清空/etc/yum.repos.d/*,下载阿里云的centos7镜像和epel镜像
#yum install wget -y #rm -rf /etc/yum.repos.d/* #wget -O /etc/yum.repos.d/Centos_Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo #wget -O /etc/yum.repos.d/epel-7 https://mirrors.aliyun.com/repo/epel-7.repo #yum clean all 清空缓存 #yum makecache 生成缓存
#yum install httpd -y #systemctl start httpd #systemctl status httpd #systemctl enable httpd
验证apache服务是否安装成功:
在浏览器中输入虚拟机的ip地址,出现下图为成功
#yum install php -y 重启apache服务 #systemctl restart httpd #vim /var/www/html/hell.php 查看php是否安装成功 < h1>hello world</h1> < h1>hi</h1> this is a....
yum安装方式可能会比较慢,可使用其他安装方法
(1)卸载旧的mysql版本
#rpm -qa|grep mysql 查看之前安装的mysq #rpm -e xxxx 卸载所有mysql服务 #yum list installed | grep mysql 也可尝试使用yum命令卸载旧版本 #yum remove mysql #find / -name mysql 查看残留mysql文件 #rm -rf 文件
(2)下载mysql的yum源
#wget https://repo.mysql.com//mysql80-community-release-el7-4.noarch.rpm --no-check-certificate 下载到当前路径,下载完成可以在当前目录查看到 #rpm -ivh mysql80-community-release-el7-4.noarch.rpm #yum repolist enable|grep mysql 查看mysql的yum源是否安装成功 #yum install mysql-server -y
(3)开启mysql服务
#systemctl start mysqld #systemctl status mysqld #systemctl enable mysqld
安装完成后,在/var/log/mysqld.log文件中给root生成了一个默认密码,通过下面的方式找到root默认密码,然后登录mysql进行修改:
#grep "temporary password" /var/log/mysqld.log
#mysql -uroot -p
mysql>alter user ‘root’@‘localhost’ identified by ‘新密码’;
报错error:You must reset your password using ALTER USER statement before executing this statement
解决方法如下:
mysql>alter user user() identified by 'abCD@1234';
密码要符合密码规则,否则会报错Your password does not satisfy the current policy requirements
如果想要修改成“123456”这种简单的密码,参考文章https://blog.csdn.net/zhanaolu4821/article/details/93622812
#yum -y install php-mysql 将php和mysql关联 #yum -y install php-gd php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel 安装常用的php模块 #systemctl restart httpd 重启apache服务
#获取下载源
#rpm -Uvh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
#查看下载的repo文件(zabbix.repo)
[root@localhost ~]# ls /etc/yum.repos.d/ Centos-L.repo.bak CentOS-x86_64-kernel.repo CentOS-Media.repo.bak zabbix.repo
#查看源地址文件内容
[root@localhost ~]# cat /etc/yum.repos.d/zabbix.repo [zabbix] name=Zabbix Official Repository - $basearch baseurl=http://repo.zabbix.com/zabbix/5.0/rhel/7/$basearch/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
#更换源地址(sed -i替换,使用#做分隔符,替换文件内源地址指向地址)
[root@localhost ~]# sed -i 's#http://repo.zabbix.com#https://mirrors.tuna.tsinghua.edu.cn/zabbix#' /etc/yum.repos.d/zabbix.repo
#清理并重新构建yum缓存
#yum clean all #yum makecache
#yum安装zabbix server和agent
[root@localhost ~]# yum -y install zabbix-server-mysql zabbix-agent
[root@localhost ~]# vim /etc/yum.repos.d/zabbix.repo
Software Collections,便于后续安装高版本的php,默认yum安装的php版本为5.4过低。
SCL(Software Collections)可以让你在同一个操作系统上安装和使用多个版本的软件,而不会影响整个系统的安装包。
软件包会安装在/opt/rh目录下
为了避免系统广泛冲突,/opt/rh包安装在目录中,例如,这允许你在 Centos7机器上安装Python3.5,而不会删除或干扰Python2.7
/etc/opt/rh/软件包的所有配置文件都存储在目录中相应的目录中,SCL包提供了定义使用所包含应用程序所需的环境变量的shell脚本,例如:PATH等
[root@localhost ~]# yum -y install centos-release-scl
#前提是安装SCL,-scl会安装到/etc/opt/rh文件夹不会跟系统应用冲突
[root@localhost ~]# yum -y install zabbix-web-mysql-scl zabbix-apache-conf-scl
#创建一个zabbix数据库,character set utf8(设置字符编码为utf8),collate utf8_bin(支持utf8)
mysql> create database zabbix character set utf8 collate utf8_bin;
#创建一个zabbix用户,zabbix@localhost(用户名为zabbix允许localhost登录),密码为abCD@1234
mysql> create user zabbix@localhost identified by 'abCD@1234';
#给zabbix用户授权,grant all privileges(授予所有权限权),
zabbix.*(授予zabbix数据库里的所有表的权限),zabbix@localhost(授予的用户是zabbix)
mysql> grant all privileges on zabbix.* to zabbix@localhost;
#刷新授权表
mysql> flush privileges; mysql>exit
#使用zabbix-mysql,导入数据库信息(使用zcat查看压缩文件内容导入到数据库)
[root@localhost ~]# zcat /usr/share/doc/zabbix-server-mysql-*/create.sql.gz | mysql -uzabbix -p zabbix Enter password:输入数据库root密码
#登录数据库,查看zabbix数据库内容
[root@localhost ~]# mysql -uroot -pabCD@1234 mysql> use zabbix; mysql> show tables; #查看库内的表
#修改zabbix server配置文件里改数据库的密码(找到DBPasswd的行,去掉注释,修改密码为数据库里zabbix用户的密码)
[root@localhost ~]# vim /etc/zabbix/zabbix_server.conf
#修改zabbix的PHP配置文件,修改时区为上海,并去掉前面注释符号“;”
[root@localhost ~]# vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
#grep验证时区已经更改为亚洲/上海
[root@localhost ~]# grep ‘timezone’ /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
#启动server端、agent端、apache服务、启动php进程(zabbix前端是交给PHp解析的)
[root@localhost ~]# systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
[root@localhost ~]# systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm
默认访问ip的80端口是apache的测试页面,需要加上/zabbix后缀
报错:cannot connect to the database.the server requested authentication method unknown to the client.
经检查,zabbix-server服务启动失败,重启服务仍失败
查看日志:
#tailf /var/log/zabbix/zabbix_server.log
报错:[Z3001]connection to database ‘zabbix’ failed:[2059] authentication plugin ‘caching_sha2_password’ cannot be loaded
解决方法:修改zabbix账号
mysql>ALTER USER 'zabbix'@'localhost' IDENTIFIED WITH mysql_native_password BY 'zabbix'; #systemctl restart zabbix-server
因为mysql8.0 引入了新特性 caching_sha2_password;这种密码加密方式客户端不支持;客户端支持的是mysql_native_password 这种加密方式;
参考https://www.cnblogs.com/Sherry-XRJ/p/11754077.html
多次点击next step
到登录界面,默认账号Admin,密码zabbix
点击用户设置可更改默认密码和界面语言、风格等:
图形化乱码问题:
zabbix默认检测了服务端本身,但是编码有问题
服务端安装字体(需要之前配置的zabbix源):
#yum -y install wqy-microhei-fonts
#alias #系统默认的别名cp=cp -i,在cp前加\就可以还原命令的本意 alias cp='cp -i'
#用刚安装的wqf的.ttc文件,覆盖原来的文件
#\cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/fonts/dejavu/DejaVuSans.ttf
刷新,乱码问题解决
客户端和服务端安装ntpdate同步时间,时区统一,关闭防火墙
#yum -y install ntpdate #ntpdate -u ntp.aliyun.com #同步时间: #mv /etc/localtime{,.bak} #ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #时区统一: sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config systemctl disable --now firewalld getenforce #查看防火墙状态 setenforce 0 #更改防火墙状态 iptables -L #查看iptables规则 #关闭防火墙:
#获取下载源
rpm -Uvh https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
#查看下载的repo文件(zabbix.repo)
[root@localhost ~]# ls /etc/yum.repos.d/ Centos-L.repo.bak CentOS-x86_64-kernel.repo CentOS-Media.repo.bak zabbix.repo
#查看源地址文件内容
[root@localhost ~]# vim /etc/yum.repos.d/zabbix.repo
#更换源地址(sed -i替换,使用#做分隔符,替换文件内源地址指向地址)
[root@localhost ~]# sed -i 's#http://repo.zabbix.com#https://mirrors.tuna.tsinghua.edu.cn/zabbix#' /etc/yum.repos.d/zabbix.repo
#清理并重新构建yum缓存
#yum clean all #yum makecache
安装agent2
#yum -y install zabbix-agent2
#配置文件和启动文件
/etc/zabbix/zabbix_agent2.conf #配置文件
/usr/sbin/zabbix_agent2 #启动文件
设置开机自启并启动
#systemctl enable --now zabbix-agent2 [root@c4-node3 ~]# netstat -tpln | grep zabbix #检查端口是否被启用(安装net-tools) tcp6 0 0 :::10050 :::* LISTEN 3327/zabbix_agent2
配置文件(修改主机名,服务端地址)
#grep -Ev '^#|^$' /etc/zabbix/zabbix_agent2.conf #过滤注释行和空行 PidFile=/var/run/zabbix/zabbix_agent2.pid #pid文件 LogFile=/var/log/zabbix/zabbix_agent2.log #日志文件 LogFileSize=0 #日志大小,默认0无限制 Server=192.168.86.148 #服务端地址(server地址,这里改为130) ServerActive=192.168.86.148 #改为服务端地址 Hostname=zabbix_server #建议改为机器的主机名 Include=/etc/zabbix/zabbix_agent2.d/*.conf #使用Include语法,“.d”目录里面所有以.conf结尾的文件都会被识别为配置文件 ControlSocket=/tmp/agent.sock
#修改完成后重启服务
systemctl restart zabbix-agent2
验证客户端连通性:
在服务端上通过命令主动获取数据
#yum -y install zabbix-get #安装工具 #zabbix_get -s '192.168.86.131' -p 10050 -k 'system.hostname' #-s地址(zabbix_agent地址),-p端口,-k命令 zabbix_agent #收集到了主机名连接成功
添加agent主机:
点击‘配置’大框里的‘主机’就可以看到默认监控的server端本机,点击‘创建主机’来添加要监控的主机
填入相关信息(主机名-显示的名字-群组linux servers-ip地址端口),然后点添加:
添加完成后,已经可以显示在主机列表里了,但是没有监控项, 点击主机名配置监控项
很多监控项不需要一个个手动定义的, 可以选择’模板’,默认为空输入linux可以看到输入推荐,选择 ‘Template OS linux by zabbix agent’,点击更新就可以看到模板里定义的监控项已经添加进去了,等到zbx亮了之后就可以监控了