zabbix微信报警

1、创建企业微信并创建一应用:

未分类

未分类

2、微信报警工具安装配置:

mkdir –p /usr/local/zabbix/alertscripts
rz(本地上传zabbix_weixin.x86_64.tar.gz)
tar –zxvf zabbix_weixin.x86_64.tar.gz
mv zabbix_weixin /weixin /usr/local/zabbix/alertscripts/weixin
chmod o+x /usr/local/zabbix/alertscripts/weixin
mv zabbix_weixin/weixincfg.json /etc/

修改:vi /etc/weixincfg.json

未分类

未分类

未分类

那个测试试了很多微信账号才成功,原来这个账号在这里可以查看得到:

未分类

测试格式:/usr/local/zabbix/ alertscripts /weixin contact(微信账号) subject(报警标题) body(报警内容)

4、添加脚本到zabbix_server.conf

AlertScriptsPath=/usr/local/zabbix/alertscripts

未分类

5、zabbix-web端设置:Actions动作,并设置触发微信报警:
脚本加入三个参数:{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE}

未分类

未分类

未分类

未分类

未分类

未分类

未分类

解决办法:后来才发现,原来是直接添加了此“微信警报”,而应该先添加操作里的小“Add”,再添加后面的大环境“Add”.如下图操作:

未分类

未分类

未分类

测试:

未分类

未分类

解决方法:

未分类

未分类

未分类

问题:发现给微信发送了两次警报:如图

未分类

解决方法:原来是因为在做邮件发送警报时,默认发送选择了“ALL”:

未分类

未分类

后来重新一次遇到的问题:
解决方法:发现所提示的目录与实际的不符。原来是由于在zabbix_server.conf配置文件中添加了脚本,没重启服务,需要重启才会生效。要不然会默认读一个目录。

/etc/zabbix_server restart

Zabbix利用JMX监控多实例Tomcat运行状态

自使用Zabbix监控系统以来,一直想用JMX来监控Tomcat,但是一直都没配置成功,总有一些问题,监控端的报错又很抽象,搜索网上大都是复制粘贴之产物,或者是缺斤短两之网文,但是一直都没放弃,至今终于配置成功,并且成功获取数据,形成图形,现在把自己解决问题的过程和配置的一些心得整理成文.

环境介绍:

  • Centos 6.5
  • Zabbix 2.2.15
  • Tomcat 7.0.68

监控JMX配置步骤

1.在zabbix服务器上安装配置zabbix-java-gateway,并且配置相关参数。

2.配置tomcat服务器,JMX服务相关参数,上传依赖包

3.zabbix web端添加监控

4.启动tomcat服务,查看zabbix web端监控运行状态,排错.

5.自定义图形和监控项

一、Zabbix-java-gateway配置

1.安装zabbix-java-gateway

yum -y install zabbix-java-gateway

2.配置zabbix-java-gateway

grep "^[A-Z]" /etc/zabbix/zabbix_java_gateway.conf
LISTEN_IP="0.0.0.0"        #监听本机所有ip
LISTEN_PORT=10052            #在10052端口提供服务
PID_FILE="/var/run/zabbix/zabbix_java.pid"
START_POLLERS=5

3.启动服务

service zabbix-java-gateway start

4.配置zabbix-server

grep "^[A-Z]" /etc/zabbix/zabbix_server.conf|grep Java
JavaGateway=127.0.0.1     #JavaGateway所在服务器的IP
JavaGatewayPort=10052     #JavaGateway的默认端口
StartJavaPollers=5         #JVM进行监控轮询实例数,默认是0

5.重启zabbix-server

service zabbix-server restart

6.查看监听端口

未分类

二、Tomcat配置

1.配置catalina.sh

vim /apache-tomcat-7.0.68/bin/catalina.sh
CATALINA_OPTS="$CATALINA_OPTS  -Dfile.encoding=utf-8
-Dcom.sun.management.jmxremote      #开启远程
-Dcom.sun.management.jmxremote.authenticate=false     #免密认证
# -Dcom.sun.management.jmxremote.port=12345       #这里不需要这行,一会儿说明原因 
-Dcom.sun.management.jmxremote.ssl=false 
-Djava.rmi.server.hostname=192.168.66.22"        #要监控的tomcat主机ip

2.配置server.xml

vim /m.aaa.com/conf/server.xml    (注意,这里是实例里面的配置文件)

在任意位置添加如下文字,意思是远程连接端口是12345,获取数据端口是123456,如果有多实例,全部都要加这行文字,端口数字不同即可

<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"  rmiRegistryPortPlatform="12345" rmiServerPortPlatform="12346"/>

3.开放指定端口

iptables -I INPUT -p tcp -m multiport –dports 12345,12346 -j ACCEPT

4.下载支持的jar包

链接:http://down.51cto.com/data/2448735

里面包含两个jar包,catalina-jmx-remote.jar和cmdline-jmxclient-0.10.3.jar 还有一个监控模板

catalina-jmx-remote.jar存放位置:/apache-tomcat-7.0.68/lib/

cmdline-jmxclient-0.10.3.jar 这个jar是用来测试连通情况的,zabbix和tomcat服务器上都要放一个

三、Zabbix web监控配置

1.添加JMX介面,这里添加的端口号是远程连接端口号

未分类

2.添加监控模板

未分类

3.监控项添加完后,JMX图标显示红色,因为tomcat服务还没有起

4.多实例监控,进入主机-项目进行配置,在server.xml中指定的什么端口,这里就选什么端口

未分类

四、启动tomcat服务,查看zabbix web端监控运行状态,排错

在zabbix服务器端尝试获取数据,显示如下数据连接正确

java -jar cmdline-jmxclient-0.10.3.jar - 192.168.66.22:12345 java.lang:type=Memory NonHeapMemoryUsage

未分类

在tomcat服务器端显示使用12346进行连接

未分类

如果看者严格按照上面的配置操作,这时zabbix服务web端JMX图标已经显示绿色,如果还是红色,请参考下面的提示排错

**1. java.rmi.ConnectException: Connection refused to host: 192.168.66.22; nested exception is: **

java.net.ConnectException: Connecti

错误原因:只在catalina.sh中配置了一个远程端口

还记得上面我在/apache-tomcat-7.0.68/bin/catalina.sh有一行注释掉了么,在这个文件中不能指定端口号,否则就会报如上错误

2. java.io.IOException: Failed to retrieve RMIServer stub: javax.naming.ServiceUnavailableException [Root exception is java.rmi.Con

错误原因:没有配置远程端口

光删除掉上面的端口号还不够,还需要在/m.aaa.com/conf/server.xml中添加相应的端口配置

3.java.lang.ClassNotFoundException: org.apache.catalina.mbeans.JmxRemoteLifecycleListener

错误原因:这是tomcat报错,缺少支持的jar包catalina-jmx-remote.jar

请往上翻,找51cto的下载链接,下载相关jar包

4. Catalina:type=ThreadPool,name=http-8080

未分类

错误原因:支持的name里没有http-8080

查看支持哪些类型和调用

java -jar cmdline-jmxclient-0.10.3.jar – 192.168.66.22:12345

上面报错的解决方法是:

1.java -jar cmdline-jmxclient-0.10.3.jar – 192.168.66.22:12347|grep Thread

未分类

2.配置模板

未分类

3.点击进入修改键值

未分类

4.改完后是这样的

未分类

5.目标是全绿

未分类

企业级监控软件zabbix-安装方法

Zabbix是一款开源并且完全免费的企业级系统监控软件,它拥有强大无比的各种监控功能,可以全方位监控你的服务器或是VPS系统运行状态。
首先各位别被企业级这几个字眼给唬住了,很多朋友可能一看到这种字眼就觉得,哇,这玩意儿不会特别难装吧!?其实我说句实在话,Zabbix安装还是挺简单的,倒是配置使用起来需要花一些时间,因为它有太多的功能,所以显的操作界面乱七八糟,初次使用的朋友可能会有点摸不着头脑。所以,我决定写一篇文章来描述如何安装zabbix

因为博主的主机的性能实在不怎么样,所以我用虚拟机来演示如何安装。有些不一样的地方我会注释说明

更新系统

[root@heroyf ~]# yum update

安装appnode面板

[root@heroyf ~]# INSTALL_AGENT=1 INSTALL_APPS=sitemgr INIT_SWAPFILE=1 INSTALL_PKGS='nginx-stable,php56,php71,mysql56' bash -c "$(curl -sS http://dl.appnode.com/install.sh)"

为什么我不选择用宝塔呢,因为宝塔的lnmp镜像源实在的慢的不能接受了

安装完成登录之后,请安装网站所需的lnmp环境

环境安装完成后,我们回到Xshell内,新建一个用户:

[root@heroyf ~]# groupadd zabbix
[root@heroyf ~]# useradd zabbix -g zabbix -s /sbin/nologin

安装EPEL源:

[root@heroyf ~]# yum -y install epel-release

安装编译Zabbix需要的各种依赖和组件:

[root@heroyf ~]# yum -y install net-snmp-devel fping

在root目录内下载Zabbix源码(在你的本地电脑也提前下载一份,待会会用到):

[root@heroyf ~]# cd /root
[root@heroyf ~]# wget https://excellmedia.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/3.4.7/zabbix-3.4.7.tar.gz

解压并进入到Zabbix目录内:

[root@heroyf ~]# tar -zxvf zabbix-3.4.7.tar.gz
[root@heroyf ~]# cd zabbix-3.4.7

编译:

[root@heroyf ~]# ./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2

如果出现如下错误

configure: error: Not found mysqlclient library
configure: error: LIBXML2 library not found
configure: error: Unable to use libevent (libevent check failed)
configure: error: Curl library not found

解决办法:

[root@heroyf ~]# yum install mysql-devel
[root@heroyf ~]# yum install libxml2 libxml2-devel
[root@heroyf ~]# yum install libevent-devel  -y
[root@heroyf ~]# yum install curl-devel

完成后如图所示:

未分类

安装:

[root@heroyf ~]# make install

通过phpmyadmin,将一个数据库的排序规则改成utf8_general_ci,如图所示:

未分类

接着我们导入zabbix-3.4.7/database/mysql目录下的数据库文件:

schema.sql
images.sql
data.sql

在phpMyAdmin内导入我们的数据库文件,如图所示:

未分类

编辑Zabbix的服务端配置文件:

[root@heroyf ~]# vim /usr/local/etc/zabbix_server.conf
修改数据库名、数据库用户名、数据库用户对应的root密码,如图所示:

未分类

接着修改Zabbix的客户端配置文件:

[root@heroyf ~]# vim /usr/local/etc/zabbix_agentd.conf

将Server=127.0.0.1后面的IP修改成你的服务器或是VPS的公网IP,如图所示:

未分类

关闭CentOS7的防火墙:

[root@heroyf ~]# systemctl stop firewalld.service
[root@heroyf ~]# systemctl disable firewalld.service

启动Zabbix的服务端和客户端:

[root@heroyf ~]# zabbix_server
[root@heroyf ~]# zabbix_agentd

确保进程处于启动状态,可用命令ps -ef查看

添加网站节点

未分类

修改php.ini中的参数max_input_time为300:

[root@heroyf ~]# find / -name php.ini

未分类

回到Xshell内,复制Zabbix的前端程序文件到你的站点目录内:

[root@heroyf ~]# cp -r /root/zabbix-3.4.7/frontends/php/* 你的站点目录

此时通过浏览器,访问你的站点,不出意外的话可以看到Zabbix的安装界面了:

未分类

检测环境组件,这里需要注意的是往下拉会有一个PHPLDAP的Warning,PHP的LDAP扩展非必须安装,所以我们无视掉即可:

未分类

填写MySQL的数据库连接信息,这里和之前我们在zabbix_server.conf配置文件内填写的内容要一致,这一步细心就好,我就不展示了

填写站点名字,请注意上面的Host和Port不要做更改

再次确认你之前填写的这些信息是否无误,没问题就点击Next step

不出意外这里会报一个错误,所以这里我们将配置文件下载到本地:

未分类

只需要将配置文件上传到我们的站点根目录下的conf目录内即可
可用工具FileZilla

回到浏览器中,再次点击Finish,就安装完成了。

安装完成后的配置

默认的管理员账号:Admin
密码:zabbix

登录进去后,第一件事情就是把密码改了,然后把站点语言修改成中文:

未分类

接着Zabbix默认会给我们启用一个没密码的Guest,为了安全起见,我们需要把这个账号停用掉:

未分类

至此,Zabbix的安装和基本配置就完成了。

Docker实战之三:zabbix自定义监控项

机器部署情况一览

总的来说,有四台机器,各自的功能如下:

a. 假设有一个机器在运行web应用,容器是tomcat,这个应用有个接口http://localhost:8080/zabbixcustomitemdemo/count,可以返回最近一分钟的某个业务量(例如网站访问次数);

b. 有一台机器安装了zabbix agent,作为自定义监控项的载体;

c. 有一台机器安装了zabbix server;
d. 有一台机器安装了mysql,作为zabbix系统的数据库;

整体部署如下图所示:

未分类

运行web应用的server

这是个基于maven的java web应用,里面有个spring mvc的controller,提供一个http服务,范围某个业务每分钟的业务量,代码如下图所示:

@Controller
public class CountController {

    @RequestMapping("/count")
    @ResponseBody
    public int count(String model, String type) {
        int base;
        int max;
        int min;

        if("a".equals(model)){
            base = 50000;
        }else{
            base =10000;
        }

        if("0".equals(type)){
            max = 9000;
            min = 1000;
        }else{
            max = 1000;
            min = 0;
        }

        return base + new Random().nextInt(max)%(max-min+1);
    }
}

从以上代码我们可以看出,http服务会返回随机数,此服务接受两个参数model和type,当model等于”a”时返回的随机数从50000开始,model不等于”a”时返回的随机数从10000开始,当type等于”0”时,在base的基础上增加的值是1000到9000之间,当type不等于”0”时,在base的基础上增加的值是0到1000之间;

整个工程的代码已经上传到git上,地址是[email protected]:zq2599/blog_demos.git,这个目录下由多个工程,本次实战的工程是zabbixcustomitemdemo,如下图:

未分类

docker-compose.yml文件

上面我们已经把四台机器的功能和关系梳理清楚了,现在就来制定docker-compose.yml文件吧:

version: '2'
services:
  zabbix-mysql-service: 
    image: daocloud.io/library/mysql:8
    container_name: zabbix-mysql-service
    environment:
      - MYSQL_ROOT_PASSWORD=888888
    restart: always
  zabbix-server-service:
    image: monitoringartist/zabbix-xxl:3.2.6
    links: 
      - zabbix-mysql-service:mysqlhost
    container_name: zabbix-server-service
    restart: always
    depends_on:
      - zabbix-mysql-service
    ports:
      - "8888:80"
    environment:
      - ZS_DBHost=mysqlhost
      - ZS_DBUser=root
      - ZS_DBPassword=888888
  zabbix-agent-a:
    image: zabbix/zabbix-agent:ubuntu-3.2.6
    links: 
      - zabbix-server-service:zabbixserverhost
    container_name: zabbix-agent-a
    restart: always
    depends_on:
      - zabbix-server-service
    environment:
      - ZBX_HOSTNAME=zabbix-agent-service-a
      - ZBX_SERVER_HOST=zabbixserverhost
  tomcat-server-service:
    image: bolingcavalry/bolingcavalrytomcat:0.0.1
    container_name: tomcat-server
    restart: always
    ports:
      - "8080:8080"

yml文件的内容如上所示,其中mysql、zabbix server,zabbix agent的配置和上一章《Docker下实战zabbix三部曲之二:监控其他机器》是一样的,新增的是一个tomcat的镜像,这个镜像是我在tomcat官方镜像的基础上做了点小改动,使得这个tomcat支持在线部署web应用,关于tomcat在线部署应用,请看文章《实战docker,编写Dockerfile定制tomcat镜像,实现web应用在线部署》: https://blog.csdn.net/boling_cavalry/article/details/70184605

准备好yml文件之后,打开终端,在yml文件所在目录下执行docker-compose up -d可以将yml文件中所有的容器都启动;

注意,如果您的电脑之前已经运行过上一章《Docker下实战zabbix三部曲之二:监控其他机器》中的docker-compose.yml文件,那么本次执行docker-compose up -d会提示启动失败,已有同样名称的容器存在,这时候可以去上一章的docker-compose.yml文件所在目录执行docker-compose down,也可以通过docker ps -a将所有容器列出,再通过docker stop命令依次停止所有容器,再执行docker-compose rm命令依次删除;

部署web应用

打开终端,进入web工程zabbixcustomitemdemo的目录下,执行命令mvn clean package -U -Dmaven.test.skip=true tomcat7:redeplo y,即可将web工程部署到tomcat容器上,关于在线部署的细节请参照文章《实战docker,编写Dockerfile定制tomcat镜像,实现web应用在线部署》;

部署成功后,打开浏览器,访问http://localhost:8080/zabbixcustomitemdemo/count,web server会返回一个数字,如下图所示:

未分类

制作访问url的shell脚本

接下来我们要在zabbix agent上做一个shell脚本,此脚本的功能时发起http请求http://localhost:8080/zabbixcustomitemdemo/count?model=a&type=0,就能得到web服务响应的数字,如果此脚本每分钟被调用一次,就能得到完整的监控曲线图了;

a. 首先,执行docker exec -it zabbix-agent-a /bin/bash登录zabbix agent的容器;
b. 登录后,执行apt-get update更新apt;
c. 先后执行apt-get install wget和apt-get install vim,安装wget和vi工具;
d. 新建目录/usr/work/,在此目录下用vi创建一个shell文件biz_count.sh,内容如下:

#"!/bin/bash
wget -qO- http://tomcathost:8080/zabbixcustomitemdemo/count?model=$1&type=$2
echo ""

上面代码的功能是访问http服务获取一个数字,其中model和type用的是shell的入参;
注意两个细节:
第一个:最后一行代码echo “”,实践证明这一行是很有用的,有了这一行就会在输出http返回的数字后进行换行,有了换行数据才能成功上报到zabbix server;
第二个:wget命令后面的url参数中,”&”符号前面要加转义的斜杠””;

e. 执行chmod a+x biz_count.sh,给shell赋予可执行权限;

agent上添加监控项

继续在zabbix agent容器上,我们要添加一个自定义监控项,这样后面在zabbix server上就能使用该监控项了:
a. 在/etc/zabbix/zabbix_agentd.d目录下,新增一个biz.conf文件,内容如下:

UserParameter=get_total_num[*],/usr/work/biz_count.sh $1 $2

以上代码配置了一个自定义监控项,名称是get_total_num,可以接受两个入参,该监控项会调用biz_count.sh这个脚本,并且把外部传来的两个入参直接传递给biz_count.sh;

b. 执行chmod a+r biz.conf使得该文件可读;

在zabbix agent上测试

继续在zabbix agent容器上,执行以下命令来测试刚刚新加的监控项:

/usr/sbin/zabbix_agentd -t get_total_num[a,0]

中括号中的a,0表示两个入参分别是”a”和”0”,我们执行四次,入参分别用[a,0]、[b,0]、[a,1]、[b,1],得到的结果如下图所示:

未分类

四个返回值分别是54741、17097、50564、10919,结合前面的java代码可以发现两个参数都生效了,数字的大小范围因入参而变化;

为了让监控项生效,需要重启zabbix agent,不过这里有个更快捷的方法可以试试:
a. 执行exit退出zabbix agent容器;
b. 执行docker restart zabbix-agent-a重启zambia agent容器;

到了这里,自定义监控项已经准备好了,接下来在zabbix server上把它配置成功,我们就能看到监控数据和曲线图了,不过在配置前,我们可以在zabbix server上测试一下能否成功调用zabbix agent上的监控项;

在zabbix server上测试agent机器的监控项

首先我们要搞清楚zabbix agent机器的ip,有两种方法:
第一种,执行docker exec -it zabbix-agent-a /bin/bash登录zabbix agent的容器,在容器中执行ip addr命令可以得到ip;
第二种,直接执行docker exec -it zabbix-agent-a ip addr命令得到ip;

不论哪种,都能得到zabbix-agent的ip是172.31.0.5;

现在我们登录zabbix server容器,执行命令docker exec -it zabbix-server-service /bin/bash即可登录,登录后执行以下命令:

zabbix_get -s 172.31.0.5 -k get_total_num[a,0]

如下图所示,测试成功,调用agent的监控项返回了符合预期的数据:

未分类

还记得我们刚才在zabbix agent上配置好之后,需要重启agent服务或者重启zabbix agent容器,如果您忘了这一步,现在zabbix server上测试会得到如下错误提示:

未分类

这时候去重启一下,再回来测试就可以成功了。

在管理页面上添加监控项

在浏览器上输入”http://localhost:8888/“登录管理页面,先添加agent机器,如下图:

未分类

添加之后,点击下图红框位置,进入监控项页面:

未分类

如下图,点击右上角的“Create item”即可开始添加监控项:

未分类

新增的监控项,我们只要填写Name,Key,Update interval(更新频率)这几个字段,其他的保持不变,每个要更新的字段的内容如下图:

未分类

填写并保存后,我们可以在Monitoring -> Latest data中看到最新的监控项数据,如下图:

未分类

接下来我们添加一个监控图形,操作如下图所示,可以进入图形管理页面:

未分类

如下图,点击右上角的“Create graph”创建一个图形:

未分类

新建图形的时候,名称随意,只要Items选中刚刚创建的监控项即可,如下图:

未分类

创建成功,现在要看看效果了,操作如下图所示:

未分类

点击”add”之后,在弹出的页面上选择刚刚我们新建的图形选项,操作完毕后,点击下图红框位置,就能看见曲线图了:

未分类

曲线图如下:

未分类

以上就是自定义监控项开发和设置的所有过程,基于监控项的操作,除了图形还能添加tirgger用来告警,在添加action用来确定告警的动作

Docker实战之二:zabbix监控其他机器

部署情况

假设实际项目中我们有两台应用服务器,为了监控它们,我们要在上面分别安装zabbix-agent服务,然后通过配置让它们与zabbix server连接,所有监控数据和监控配置数据都被zabbix server保存在mysql中,部署情况如下图:

未分类

真实场景中是在应用服务器上安装zabbix agent服务,但是安装agent的过程和步骤不是本次实践的重点,为了快速体验服务本文使用了zabbix官方的agent镜像,这个镜像实际上就是在ubuntu14上安装了zabbix agent(在服务器上安装zabbix agent的过程就不在本文中详述了,对安装有兴趣的读者们可以去网上搜索相关资料)

docker-compose.yml文件

按照前面图片所示的部署情况,我们的docker-compose.yml内容如下,mysql和zabbix server是必须的,再新增了两个zabbix agent容器,名称分别是zabbix-agent-a和zabbix-agent-b:

version: '2'
services:
  zabbix-mysql-service: 
    image: daocloud.io/library/mysql:8
    container_name: zabbix-mysql-service
    environment:
      - MYSQL_ROOT_PASSWORD=888888
    restart: always
  zabbix-server-service:
    image: monitoringartist/zabbix-xxl:3.2.6
    links: 
      - zabbix-mysql-service:mysqlhost
    container_name: zabbix-server-service
    restart: always
    depends_on:
      - zabbix-mysql-service
    ports:
      - "8888:80"
    environment:
      - ZS_DBHost=mysqlhost
      - ZS_DBUser=root
      - ZS_DBPassword=888888
  zabbix-agent-a:
    image: zabbix/zabbix-agent:ubuntu-3.2.6
    links: 
      - zabbix-server-service:zabbixserverhost
    container_name: zabbix-agent-a
    restart: always
    depends_on:
      - zabbix-server-service
    environment:
      - ZBX_HOSTNAME=zabbix-agent-service-a
      - ZBX_SERVER_HOST=zabbixserverhost
  zabbix-agent-b:
    image: zabbix/zabbix-agent:ubuntu-3.2.6
    links: 
      - zabbix-server-service:zabbixserverhost
    container_name: zabbix-agent-b
    restart: always
    depends_on:
      - zabbix-server-service
    environment:
      - ZBX_HOSTNAME=zabbix-agent-service-b
      - ZBX_SERVER_HOST=zabbixserverhost

如上所示,zabbix agent在配置过程中要用到zabbix server的ip信息,这里我们通过links参数,在zabbix agent的host文件中加入了zabbix server的ip信息,host name是zabbixserverhost;

另外,ZBX_HOSTNAME和ZBX_SERVER_HOST这两个环境变量,在zabbix agent镜像的官方文档中已经说明,如下图,ZBX_HOSTNAME用来表示自己的身份,ZBX_SERVER_HOST是用来标明zabbix server的ip信息的,这里直接用link参数中的alias来表示,就能通过host直接找到zabbix server的ip了:

未分类

启动docker 容器

打开控制台,在docker-compose.yml文件所在的目录下执行命令docker-compose up -d,如图:

未分类

进入控制台

等待大约1分钟,让zabbix server完成初始化,然后就能登录管理页面了,详情请参照《Docker下实战zabbix三部曲之一:极速体验》一文,登录后进入hosts页面,如下图:

未分类

获取监控机器ip

按照前面的部署描述图上的部署,有两台机器装了zabbix agent服务,然后想要加入监控,第一步我们要把机器的ip确定下来,在控制台执行docker exec -it zabbix-agent-a ip addr命令,可以看到如下输出,第一台机器的ip是172.31.0.4:

未分类

在控制台执行docker exec -it zabbix-agent-b ip addr命令,可以看到如第二台机器的ip是172.31.0.5;

添加机器监控

点击hosts页面右上角的Create host按钮,可以添加监控机器,如下图:

未分类

在添加机器的页面,主要参数填写如下:
a. Host name :机器的环境变量ZBX_HOSTNAME的值:zabbix-agent-service-a;
b. Visible name :和Host name的值相同;
c. Groups : 机器分组,这里选择Linux servers;
d. Agent interfaces:这里面只需要填写IP address,就是刚才我们通过命令docker exec -it zabbix-agent-a ip addr得到的ip:172.31.0.4;
这个页面只需要填写以上四点内容,其他的都保持默认值,填写完毕后点击底部的”Add”按钮,如下图:

未分类

增加成功后,在列表中可以看到新增的机器,如下图:

未分类

添加监控项

在机器列表页面中,点击机器名称,如下图红框中位置:

未分类

在打开的页面点击”Templates”,如下图红框所示:

未分类

再点击”Select”按钮,如下图红框所示:

未分类

在弹出的页面中,勾选“Template OS Linux”,然后再点击底部的“Select”按钮,这样就把linux服务的常用监控项给批量添加了,如下图:

未分类

注意,返回的页面中,一定要点击“Add”才能让把刚才的选择加上,如下图:

未分类

然后点击“Update”,完成监控项的批量添加,如下图:

未分类

按照同样的方法把另一台机器的监控也加上;

等待大约1-2分钟后,再刷新hosts页面,就能看到列表中的”ZBX”图标已经变为绿色,表示监控已经生效;

查看监控信息

我们来看看监控曲线图吧,点击下图红框中的“Graphs”:

未分类

可以看到有5个曲线图可以查看,如下图,我们看一下cpu load:

未分类

在跳转的页面中,点击“Previdew”,就能看到cpu load的曲线图了,如下图:

未分类

至此,我们添加监控机器的实战已经完成了,但是在真实场景中,我们除了cpu、磁盘等基础信息的监控,还要监控一些业务有关的数据,例如某个http服务每分钟的访问量。

Docker下实战之一:搭建zabbix监控平台

创建docker-compose.yml文件

首先创建一份docker-compose.yml文件,内容如下:

version: '2'
services:
  zabbix-mysql: 
    image: daocloud.io/library/mysql:8
    container_name: zabbix-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=888888
    restart: always
  zabbix-server:
    image: monitoringartist/zabbix-xxl
    links: 
      - zabbix-mysql:mysqlhost
    container_name: zabbix-server
    restart: always
    depends_on:
      - zabbix-mysql
    ports:
      - "8888:80"
    environment:
      - ZS_DBHost=mysqlhost
      - ZS_DBUser=root
      - ZS_DBPassword=888888

创建容器

打开命令行,在刚才创建的docker-compose.yml目录下,执行docker-compose up -d,这样就会先后启动mysql和zabbix server两个服务的容器,如下图:

未分类

等待zabbix server初始化

在命令行输入命令docker logs -f zabbix-server-service,查看zabbix server的日志输出,下图是部分日志的截图,可以看到有数据库初始化的操作:

未分类

登录zabbix管理页面体验

等待大约一分钟之后,zabbix server的日志不再滚动,表示初始化已经完成,打开浏览器输入http://localhost:8888,可以看到zabbix的管理系统的登录页面,如下图:

未分类

输入用户名admin,密码zabbix

登录后即可看到管理系统了,如下图:

未分类

按照下图的操作,查看已经监控的主机情况,如图,目前只能看到一台机器的信息,就是zabbix server自己这台机器,从列表的几列信息中可以看到有64个监控项,43个触发器,10个图形:

未分类

上图右侧的红框中显示的status是”Disabled”,表示这个host的监控还没有启动,点击这个”Disabled”就能启动监控,将状态变为”Enabled”,大约1分钟后再刷新页面,可以看到展示如下图:

未分类

除了状态变为”Enabled”,右侧原本灰色的”ZBX”也变成了绿色,表示该机器的监控状态是正常的;

体验监控图形

按照下图的红框和箭头操作,可以看到zabbix server所在机器的cpu load的曲线图:

未分类

显示中文

按照下图的箭头依次点击红框中的内容:

未分类

在打开后的页面中按照下图的箭头依次选择和点击:

未分类

这时候再点击右上角的”注销”按钮,退出重现登录,如下图红框所示:

未分类

再重新登录后,就能看见页面已经全部中文显示了,如下图:

未分类

以上就是Docker下实战zabbix的第一部分,快速体验zabbix系统和服务,但只有一个zabbix server服务器意义不大,毕竟实际场景是要通过zabbix系统去监控其他机器和服务,下一章我们尝试把zabbix agent加入进来,以更接近实际场景的方式来继续学习zabbix。

zabbix主机自动发现和监控

在主机较多的时候,配置主机自动发现并加入监控可以代替手动的添加主机,减轻工作量,自动发现由服务端主动发起,Zabbix Server开启发现进程,定时扫描局域网中IP服务器、设备。可以根据需要,在对主机安装系统的时候就安装配置并启动zabbix-agent服务,这样的话只要主机系统安装完成,便会自动加入监控

1、在客户机上安装zabbix-agent并配置

2、zabbix-server自动发现和监控

2.1 创建自动发现规则

依次点击:配置——>自动发现,选择Local network或创建自动发现规则

填写server端所扫描的主机ip地址所在范围,例如数据库服务器所用的范围为192.168.1.51-59

修改适合的时间延迟(延迟太短如果主机太多会导致有的主机扫描不到)

检查项不必修改,默认即可

设备唯一性准则选择ip地址

最后勾选已启用、点击更新

未分类

2.2 创建发现动作

依次点击:配置——>动作,选择事件源为自动发现,点击Auto discovery. Linux servers.——>操作

添加新的动作操作,当主机自动发现并添加监控的时候自动给管理员发送邮件提示,选择要发送邮件的用户,并去掉勾选消息内容,这样收到的邮件才有内容,点击更新后启用该动作

未分类

未分类

2.3 配置邮件通知

配置发件人邮箱,依次点击:管理——>报警媒介类型——>Email,填写邮箱服务器的地址以及邮件用户及客户端授权码,并勾选已启用

未分类

配置收件人邮箱,依次点击:管理——>用户,点击要收到邮件的用户,点击报警媒介——>添加,填写邮件地址,启用时间和报警类型根据需要选择,点击添加——>更新

未分类

3、等待自动发现并添加监控

点击监测中——>自动发现,等待发现主机

未分类

发现主机成功后会自动在主机列表中出现发现的主机并添加了监控

未分类

同时,邮箱也收到了邮件

未分类

zabbix通过企业微信发送监控告警

很好的监控线上业务,需要有及时提醒的告警功能,以便及时处理问题,在运维的监控工作中,告警大概有这么几种,一是邮件,较为传统,往往会被忽略,因为现在垃圾邮件实在太多,二是短信,这个比较有及时性,但有时也会有垃圾短信,一般情况下,人们的习惯是收到短信,都会看一眼!所以相对邮件关注率要高一些,第三种是通过钉钉或者企业微信这种做监控告警,目前来说,还是比较及时和重要的,因为办公信息,大家都很重视,因为大家都是自驱型人才,下面的python脚本,用于调用企业微信自定义应用来发送告警消息(或者这样说不准备,暂且这么说吧):

#!/usr/bin/python
# --*-- coding:utf8 --*--
# Author: Jack.Z


import json
import sys
import simplejson
import requests


def get_token(cid, secret):
    gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + cid + '&corpsecret=' + secret
    try:
        req = requests.get(gettoken_url)
    except requests.HTTPError as e:
        print e.errno
        sys.exit()

    return json.loads(req.text)['access_token']


def send_data(token, account, subject_name, context):
    send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + token
    send_values = {
        "touser": account,          # 企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。
        "toparty": "2",             # 企业号中的部门id。
        "msgtype": "text",          # 消息类型。
        "agentid": "1000002",       # 企业号中的应用id。
        "text": {
            "content": subject_name + 'n' + context
        },
        "safe": "0"
    }

    data = simplejson.dumps(send_values, ensure_ascii=False).encode('utf-8')
    try:
        req = requests.post(send_url, data)
    except requests.HTTPError as e:
        print e.errno
        sys.exit()

    print req.text


if __name__ == '__main__':
    user = str(sys.argv[1])
    subject = str(sys.argv[2])
    content = str(sys.argv[3])

    corp_id = '*************'
    corp_secret = '******************'

    access_token = get_token(corp_id, corp_secret)
    send_data(token=access_token, account=user, subject_name=subject, context=content)

前提条件是: 你得有企业微信,然后呢,还要自建应用, 然后在zabbix中做相关设置,下面是我们在实际测试中的信息提示载图:

未分类

zabbix配置

zabbix的一些常用配置

zabbix-agent

首先,安装完zabbix-web之后,想要监控系统,还需要在系统安装一个agent端:

yum -y install zabbix-agent

命令行安装即可,安装完成之后,可以在本地服务器下找到配置文件,我的是在:/etx/zabbix在:

zabbix_agentd.conf
zabbix_agentd.d

其中zabbix_agentd.d是文件夹,里面是具体的监控配置文件userparameter_mysql.conf,这个文件里面就是一系列zabbix可用的监控指标的配置,这个后面再专门写写zabbix的配置。

zabbix_get

zabbix有个工具:zabbix_get,可以用来获取监控指标,用法示例:

zabbix_get -s IP -k mysql.status[Com_insert]

上面这条命令在配置文件配置完成的情况下,可以用来获取服务器上MySQL执行的insert数量。

图像乱码问题

在第一次使用zabbix,图形显示,中文是一个个的方框,也就是乱码,这是因为zabbix的汉化不是很完全,可以手工替换字体来解决乱码问题。
首先在本地windows机器下拿到中文字体,例如楷体:simkai.ttf(文件路径:C:WindowsFonts)
然后把windows上下载完成的字体上传到zabbix服务器中,路径:/usr/share/zabbix/fonts
该目录下本来有一个系统字体,并且软链接到zabbix-web,也就是页面显示的字体,现在要做的就是用自己上传的楷体替换到系统原来的字体

[root@localhost fonts]# ll
total 11512
lrwxrwxrwx. 1 root root       33 Jun 26 15:46 graphfont.ttf -> /etc/alternatives/zabbix-web-font

首先是将系统原字体备份mv graphfont.ttf graphfont.ttf.back
然后修改配置文件/usr/share/zabbix/include/defines.inc.php
将文件中的FONT_NAME从原来的graphfont修改为simkai,一共有两处,修改完成之后页面上就可以看见乱码解决了~

zabbix通过企业微信应用发送告警消息

本文参考大佬们的方法整理记录

首先注册申请(http://work.weixin.qq.com/?spm=5176.11156381.0.0.43bb71b2a3RojM)微信企业号
登录企业微信web后台,在【我的企业】选择【企业信息】,查看CorpID
在【企业应用】选择【创建应用】,完成后记录AgentId和Secret

未分类

TIPS

可以通过接口调试工具(http://work.weixin.qq.com/api/devtools/devtool.php?spm=5176.11156381.0.0.43bb71b2a3RojM)测试是否可以成功返回access_token

参考官方API说明发送应用(https://work.weixin.qq.com/api/doc?spm=5176.11156381.0.0.43bb71b2MZpcTD#10167)

配置自定义脚本

这里引用Zhang Sir’s (https://www.zhsir.org/article/134.html?spm=5176.11156381.0.0.43bb71b2MZpcTD)脚本,下载到zabbix_server.conf中设置的自定义告警脚本存放目录下,也可以参考GitHub上微信报警项目(https://github.com/X-Mars/Zabbix-Alert-WeChat?spm=5176.11156381.0.0.43bb71b29DyTuu)

# grep alertscripts /etc/zabbix/zabbix_server.conf 
AlertScriptsPath=/usr/lib/zabbix/alertscripts
# wget http://download.zhsir.org/Zabbix/weixin_linux_amd64
# mv weixin_linux_amd64 wechat
# chmod 755 wechat 
# chown  zabbix:zabbix wechat
# ./wechat -h
Usage of ./wechat:
  -agentid string
        agentid
  -author string
        http://www.oneoaas.com
  -corpid string
        corpid
  -corpsecret string
        corpsecret
  -msg string
        Send Message
  -user string
        which user to send msg
# ./wechat --corpid=CorpID --agentid=企业应用ID --corpsecret=企业应用Secret --msg="告警消息" --user=消息接收者的企业微信账号  
{"errcode":0,"errmsg":"ok","invaliduser":""}  #命令行测试是否可以发信

zabbix server端脚本定义完成后,可以应用到已经接入的主机,直接更新告警媒介即可

【管理/Adminastration】—>【媒介类型/Media Types】—>【创建媒体类型/Create Media Types】

未分类

添加用户告警的媒介并更新
【管理/Adminastration】—>【用户/Users】—>【媒介/Media】

未分类

添加主机后将主机加入用户和组,并创建监控项和触发器及动作
【配置/Configuration】—>【主机/host】—>【监控项】—>【触发器】
注意触发器的严重性需设置和action中定义的触发条件一致

未分类

【配置/Configuration】—>【动作/Actions】—>【创建动作/Create action】
定义告警的触发条件,以及告警默认信息,持续时间

未分类

未分类