Close

Zabbix与Slack实现Web服务监控预警

Web服务使用持续集成自动部署时,经常因为一些配置的修改或其他依赖问题造成服务启动不成功,影响使用。为了解决这个问题,今天我们就通过Zabbix监控Web服务是否正常,并推送到Slack,随时掌握服务器的情况。

Zabbix安装

Zabbix的安装有许多方式,这里使用docker的方式进行安装,其他方式可参见Zabbix官网

首先使用下面命令创建一个mysql容器:

docker run --name mysql-server -t \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_password" \
      -e MYSQL_ROOT_PASSWORD="root_password" \
      -d mysql:5.7 \
      --character-set-server=utf8 --collation-server=utf8_bin

然后创建Java gate容器:

docker run --name zabbix-java-gateway -t \
      -d zabbix/zabbix-java-gateway:latest

创建mysql zabbix容器:

docker run --name zabbix-server-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_password" \
      -e MYSQL_ROOT_PASSWORD="root_password" \
      -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
      --link mysql-server:mysql \
      --link zabbix-java-gateway:zabbix-java-gateway \
      -p 10050:10050 \
      -d zabbix/zabbix-server-mysql:latest

最后启动Zabbix web容器:

docker run --name zabbix-web-nginx-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_password" \
      -e MYSQL_ROOT_PASSWORD="root_password" \
      --link mysql-server:mysql \
      --link zabbix-server-mysql:zabbix-server \
      -p 80:80 \
      -d zabbix/zabbix-web-nginx-mysql:latest

Zabbix配置

在被监控端安装Zabbix Agent

Zabbix安装好了,我们需要把我们需要监控的主机添进系统。使用Agent interfaces方式需要在被监控主机安装Zabbix Agent:

rpm -ivh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
yum -y install zabbix-agent

安装完成后,编辑配置文件/etc/zabbix/zabbix_agentd.conf,Server字段改为Server=0.0.0.0/0 方便外部访问。

启动服务:

systemctl start zabbix-agent
systemctl enable zabbix-agent

添加服务器

添加服务器,输入被监控服务器地址与端口号,可以在模板里选择对应的系统模板,这样Zabbix自动会针对模板配置许多规则。

配置Web监控

我们开始添加Web监控,主要配置名称与时间。

Setps页面里添加需要监控的URL地址,返回码为:200。

配置触发器

添加触发器,以便检测之前添加的监控是否正常,我们需要设置名称、级别等信息,最主要的是表达式配置,last方式传的值是index,我们需要判断最近三次返回码都不是200:

{gq server:web.test.rspcode[tuner api (gq/gz),gz].last(0)}<>200 and
{gq server:web.test.rspcode[tuner api (gq/gz),gz].last(1)}<>200 and
{gq server:web.test.rspcode[tuner api (gq/gz),gz].last(2)}<>200

对接Slack

下载slack推送脚本

我们打算使用Shell脚本推送消息,把slack.sh下载回本地,放入zabbix 脚本目录 /usr/local/share/zabbix/alertscripts

添加Media types

添加一个新的Media types:

配置用户Media

选择需要收到推送的用户,添加一个新的Media,可以配置频道、时间、级别等。

Leave a Reply

Your email address will not be published. Required fields are marked *