ansible部署zabbix监控系统

1、搭建zabbix服务,实现监控linux和windows的内存,cpu,磁盘,网络等基础指标

  • zabbix部署网络拓扑图


    zabbix部署网络拓扑
  • 环境说明
    操作系统:Centos7
    安装zabbix-release
    node1:10.193.116.98 安装zabbix-server模块
    node2:10.193.116.97 安装zabbix数据库模块
    node3:10.193.116.96 安装zabbix-web模块
    node4:10.193.116.95 安装zabbix-proxy模块
    node5:10.193.116.94 安装zabbix-agent模块
    A机房:zabbix-agent直接连接zabbix-server
    B机房:zabbix-agent直接连接zabbix-proxy

  • 通过ansible进行部署

    • 创建roles和hosts文件
    mkdir -pv {zabbix-server,zabbix-agent,zabbix-web,zabbix-proxy,zabbix-mariadb}/{tasks,vars,templates,files,meta,defaults,handlers}
    
    hosts文件
    [node1-zabbix-server]
    10.193.116.98
    [node2-zabbix-mariadb]
    10.193.116.97
    [node3-zabbix-web]
    10.193.116.96
    [node4-zabbix-proxy]
    10.193.116.95
    [all-zabbix-agent]
    10.193.116.[94:97]
    
    
    • zabbix-mariadb 角色
    [root@ansible zabbix-mariadb]# tree
    .
    |-- defaults
    |-- files
    |   |-- create.sql.gz
    |   `-- my.cnf
    |-- handlers
    |-- meta
    |-- tasks
    |   `-- main.yml
    |-- templates
    `-- vars
    
    main.yml内容
    - name: install mariadb-server
      yum: name={{ item }}
      with_items:
      - mariadb-server
      - MySQL-python
    - name: copy conf
      copy: src=my.cnf dest=/etc/my.cnf backup=yes
    - name: start service
      service: name=mariadb state=started enabled=yes
    - name: create zabbix databases
      mysql_db: login_user=root name={{ db_name }} encoding=utf8
    - name: mariadb conf
      mysql_user: login_user=root name={{ zabbix_name}} host={{ zabbix_hosts }} password={{ zabbix_passwd }} priv='{{ db_name }}.*:ALL' state=present
      tags: db
    
    playbook内容段
    - hosts: node2-zabbix-mariadb
      remote_user: root
      vars:
      - db_name: zabbix
      - zabbix_name: zabbix
      - zabbix_hosts: 10.193.116.%
      - zabbix_passwd: zabbix
      roles:
      - zabbix-mariadb
    
    
    • zabbix-server 角色
     [root@ansible zabbix-server]# tree
     .
     |-- defaults
     |-- files
     |-- handlers
     |-- meta
     |-- tasks
     |   `-- main.yml
     |-- templates
     |   `-- zabbix_server.conf.j2
     `-- vars
      
     main.yml内容
     - name: install zabbix-server-mysql zabbix-get
       yum: name={{ item }}
       with_items:
       - zabbix-server-mysql
       - zabbix-get
       - mariadb
       - zabbix-agent
    - name: install conf
      template: src=zabbix_server.conf.j2 dest=/etc/zabbix/zabbix_server.conf
    - name: init zabbix_db
      shell: zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -h{{ DBHost }} -u{{ DBUser }} -p{{     DBPassword }} {{ DBName }}
      ignore_errors: yes
    - name: start service
      service: name=zabbix-server state=started enabled=yes
    - name: start agent
       service: name=zabbix-agent state=started enabled=yes
    
    zabbix_server.conf.j2中变量如下
    DBHost={{ DBHost }}
    DBName={{ DBName }}
    DBUser={{ DBUser }}
    DBPassword={{ DBPassword }}
     
    playbook内容段
    - hosts: node1-zabbix-server
     remote_user: root
     vars:
     - DBHost: 10.193.116.97
     - DBName: zabbix
     - DBUser: zabbix
     - DBPassword: zabbix
     roles:
     - zabbix-server
    
    • zabbix-web 角色
    [root@ansible zabbix-web]# tree
    .
    |-- defaults
    |-- files
    |   `-- zabbix.conf
    |-- handlers
    |-- meta
    |-- tasks
    |   `-- main.yml
    |-- templates
    `-- vars
    main.yml内容
    - name: install zabbix-server-web
      yum: name={{ item }}
      with_items:
      - zabbix-web-mysql
      - mariadb
    - name: httpd conf
      copy: src=zabbix.conf dest=/etc/httpd/conf.d/
    - name: start service
      service: name=httpd state=started enabled=yes
    
    playbook内容段
    - hosts: node3-zabbix-web
      remote_user: root
      roles:
      - zabbix-web                                
    
    • zabbix-proxy 角色
    [root@ansible zabbix-proxy]# tree
    .
    |-- defaults
    |-- files
    |   `-- my.cnf
    |-- handlers
    |-- meta
    |-- tasks
    |   `-- main.yml
    |-- templates
    |   `-- zabbix_proxy.conf.j2
    `-- vars
    
    main.yml内容
    - name: install mariadb-server
      yum: name={{ item }}
      with_items:
      - mariadb-server
      - zabbix-proxy-mysql
      - zabbix-get
      - MySQL-python
    - name: copy conf
      copy: src=my.cnf dest=/etc/my.cnf backup=yes
    - name: start service
      service: name=mariadb state=started enabled=yes
    - name: create zabbix databases
      mysql_db: login_user=root name={{ DBName }} encoding=utf8
    - name: mariadb conf
      mysql_user: login_user=root name={{ DBUser }} host={{ DBHost }} password={{ DBPassword }} priv='{{ DBName }}.*:ALL' state=present
      tags: db
    - name: init proxy_db
      shell: zcat /usr/share/doc/zabbix-proxy-mysql*/schema.sql.gz | mysql -h{{ DBHost }} -u{{ DBUser }} -p{{ DBPassword }} {{ DBName }}
      ignore_errors: yes
    - name: copy zabbix-proxy
      template: src=zabbix_proxy.conf.j2 dest=/etc/zabbix/zabbix_proxy.conf
    - name: start zabbix-proxy
      service: name=zabbix-proxy state=started enabled=yes
    
    zabbix_proxy.conf.j2中变量
    Server={{ Server }}
    DBName={{ DBName }}
    DBUser={{ DBUser }}
    DBPassword={{ DBPassword }}
    
    playbook内容段
    - hosts: node4-zabbix-proxy
      remote_user: root
      vars:
      - Server: 10.193.116.98
      - DBHost: localhost
      - DBName: zabbix_proxy
      - DBUser: zabbix
      - DBPassword: zabbix
      roles:
      - zabbix-proxy
    
    • zabbix-agent 角色
    [root@ansible zabbix-agent]# tree
    .
    |-- defaults
    |-- files
    |-- handlers
    |-- meta
    |-- tasks
    |   `-- main.yml
    |-- templates
    |   `-- zabbix_agentd.conf.j2
    `-- vars
    
    main.yml内容  
    - name: install zabbix-agent
      yum: name={{ item }}
      with_items:
      - zabbix-agent
    - name: agent conf
      template: src=zabbix_agentd.conf.j2 dest=/etc/zabbix/zabbix_agentd.conf
    - name: start service
      service: name=zabbix-agent state=started enabled=yes
    
    zabbix_agentd.conf.j2中变量
    Server={{ Server }}
    ServerActive={{ ServerActive }}
    Hostname={{ ansible_default_ipv4.address }}
    
    playbook内容段
    - hosts: all-zabbix-agent
      remote_user: root
      vars:
      - ServerActive: 10.193.116.98
      - Server: 10.193.116.98
      roles:
      - zabbix-agent                                                    
    
    • playbook
    [root@ansible ansible]# vim zabbix.yaml 
    - hosts: node2-zabbix-mariadb
      remote_user: root
      vars:
      - db_name: zabbix
      - zabbix_name: zabbix
      - zabbix_hosts: 10.193.116.%
      - zabbix_passwd: zabbix
      roles:
      - zabbix-mariadb
    
    - hosts: node1-zabbix-server
      remote_user: root
      vars:
      - DBHost: 10.193.116.97
      - DBName: zabbix
      - DBUser: zabbix
      - DBPassword: zabbix
      roles:
      - zabbix-server
    
    - hosts: node3-zabbix-web
      remote_user: root
      roles:
      - zabbix-web
    
    - hosts: node4-zabbix-proxy
      remote_user: root
      vars:
      - Server: 10.193.116.98
      - DBHost: localhost
      - DBName: zabbix_proxy
      - DBUser: zabbix
      - DBPassword: zabbix
      roles:
      - zabbix-proxy
    
    - hosts: all-zabbix-agent
      remote_user: root
      vars:
      - ServerActive: 10.193.116.98
      - Server: 10.193.116.98
      roles:
      - zabbix-agent
    
    • 运行结果


      运行结果
  • 将node5添加监控
    配置--->主机-->填写主机名称-->选择群组-->填写接口IP-->选择proxy-->添加模板-->更新


    主机添加过程
  • 查看node5监控数据
    监测-->最新数据-->选择主机-->选择应用集


    查看node5内存监控数据
  • windows服务器监控(10.193.116.93)

    • 网管下载Windows版本的zabbix-agent
      地址:https://www.zabbix.com/cn/download_agents#tab:40LTS
      下载Windows版本zabbix-agent
    • 解析安装包至Windows本地C盘


      解压至本地C盘
    • 安装
      cd "C:\zabbix_agents-4.0.7-win-amd64\bin"
      zabbix_agentd.exe -i -c "C:\zabbix_agents-4.0.7-win-amd64\conf\zabbix_agentd.conf"


      安装
  • 启动
    命令行启动:
    zabbix_agentd.exe -s -c "C:\zabbix_agents-4.0.7-win-amd64\conf\zabbix_agentd.conf"


    启动命令

或者通过服务管理启动:


zabbix agent 启动管理
  • 测试是否获取数据


    测试获取angent状态
  • zabbix-web 添加Windows主机,并查看数据


    Windows主机状态

    Windows host监控数据

2、搭建zabbix服务,监控nginx status

  • node5 安装nginx,添加开启nginx状态监控
location /nginx_status {
        # Turn on nginx stats        
        stub_status on;
        # I do not need logs for stats
        access_log   off;
        # Security: Only allow access from 192.168.1.100 IP #
        allow 127.0.0.1/8;
        deny all;
}
  • 编写监控脚本
[root@node5 ~]# vim /usr/bin/nginx_status.sh
#!/bin/bash
#
host='127.0.0.1'
port='80'
statusurl='nginx_status'

active(){
        curl -s http://${host}:${port}/${statusurl} |awk '/^Active/{print $3}'
}

accepts(){
        curl -s http://${host}:${port}/${statusurl} |awk 'NR==3{print $1}'
}

handled(){
        curl -s http://${host}:${port}/${statusurl} |awk 'NR==3{print $2}'
}

requests(){
        curl -s http://${host}:${port}/${statusurl} |awk 'NR==3{print $3}'
}

reading(){
        curl -s http://${host}:${port}/${statusurl} |awk 'NR==4{print $2}'
}

writing(){
        curl -s http://${host}:${port}/${statusurl} |awk 'NR==4{print $4}'
}

waiting(){
        curl -s http://${host}:${port}/${statusurl} |awk 'NR==4{print $6}'
}

case "$1" in
active)
        active
;;
accepts)
        accepts
;;
handled)
        handled
;;
requests)
        requests
;;
reading)
        reading
;;
writing)
        writing
;;
waiting)
        waiting
;;
*)
        echo $"Usage: $0 {active|accepts|handled|requests|reading|writing|waiting}"
        exit 1
esac
  • zabbix-agent 自定义key
[root@node5 ~]# vim /etc/zabbix/zabbix_agentd.d/userparameter_nginx.conf
UserParameter=nginx.statu[*],/usr/bin/nginx_status.sh $1
重启zabbix-agent
[root@node5 ~]# systemctl  restart zabbix-agent
  • zabbix-web页面添加nginx_status告警items


    nginx_status告警items

    配置Nginx_requests来进行说明
    首先配置监控项
    配置-->模板-->监控项


    监控项页面配置

    接着进入进程配置页面
    设置为每秒更改
  • 添加告警
    配置-->模板-->触发器
    名称:Nginx每秒请求超过100
    表达式:
    {Centos7-Nginx:nginx.statu[requests].last(#1)}>100


    Nginx每秒请求超过100
  • 压测触发告警

安装ab压测工具
[root@node5 ~]# yum -y install httpd-tools 
[root@node5 ~]# ab -n 5000 -c 20 http://127.0.0.1/nginx_status
告警触发

采集Nginx_requests数据
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容