一直想做个关于资源巡检的功能,其需求就是通过邮件的形式来查看linux资源的使用情况,超出一定的阈值时高亮显示出来。也有人说啦,这个需求通过监控zabbixprometheus都能做呀,何必自己重复造轮子做这些啊。我就是瞎折腾呗,只能说巡检报告是一总主动探测系统资源的一种手段,一般公司监控,外部都不能直接访问的,需要拨通vpn才可以,有些情况我们是无法连接到监控平台,比如放假游玩,不想打开电脑…这些情况下通过每天的巡检报告可以随时的了解系统资源的情况。

使用task方式获取报告

统计的系统资源

  • Hostname
  • Main IP
  • OS
  • CPU Used
  • CPU LoadAvg
  • Mem Used
  • Swap Used
  • Disk Size Used
  • Disk Inode Used
  • Tcp Connection Used
  • Timestamp

克隆git仓库

  

git clone https://github.com/lework/Ansible-roles.git /etc/ansible/roles/
mv /etc/ansible/roles/filter_plugins /etc/ansible/

这里我们只用到了filter_pluginsos-check role

在使用role之前,一定要查看role的README.md

定义主机

#/etc/ansible/hosts
[node2]
192.168.77.130 ansible_ssh_pass=


编写playbook
#/etc/ansible/os-check.yaml
---
- hosts: all
gather_facts: false
vars:
check_report_path: /tmp
check_mail_host: "smtp.lework.com"
check_mail_port: ""
check_mail_username: "ops@lework.com"
check_mail_password: "le123456"
check_mail_to: ["ops@lework.com"]
roles:
- os-check


执行playbook
ansible-playbook /etc/ansible/os-check.yaml

执行结果

报告文件存放在/tmp目录下

邮件中也能看到报告内容了

执行流程

简要的说下执行流程

  1. 使用脚本files\check_linux.sh在远端执行获取资源数据,并以json结构体返回。
  2. 使用jinja2模板将获取的数据渲染到模板文件中templates\report-cssinline.html,生成的文件存放在指定的目录中。
    • report-cssinline.html 是将css设置以inline的方式存储的html文件,report.html才是源模板文件,修改完源模板文件后,使用Responsive Email CSS Inliner进行转换下,才能更好的兼容邮件显示。
    • 其中模板中使用的get_check_data过滤器是从hostvars中获取每台主机的脚本执行结果,进行分析整理传递给模板,使用传递回来的数据进行渲染。
  3. 获取生成的模板文件内容,并通过smtp发送给接收人。

使用fact数据获取报告

上面的操作是我们通过自己写脚本获取系统数据,这种方式有执行速度快,自定义强的优点,也有兼容性差的问题,对各个系统支持的不全面。使用fact数据则是相反。

那下面我们就使用ansible的fact数据来生成巡检报告

统计的系统资源

  • Hostname
  • Main IP
  • OS
  • Mem Used
  • Swap Used
  • Disk Size Used
  • Disk Inode Used
  • Timestamp

配置脚本

将下列链接中的文件下载到ansible控制机上

https://github.com/lework/script/tree/master/python/facts_os_check

ansible.py 中我们配置fact目录和smtp信息

# 设置fact目录
fact_dirs = [os.path.join(current_path, 'facts')] # 发送邮件
subject = 'System Check Report [%s]' % now_date
to_list = ['lework@ops.com'] mail_config = {
'mail_host': 'smtp.lework.com',
'mail_port': '',
'mail_user': 'ops@lework.com',
'mail_pass': ''
}

执行脚本

使用python3环境

pip3 install jinja2

[ ! -d ./report ] && mkdir ./report
[ ! -d ./facts ] && mkdir ./facts rm -rf ./facts ansible all -m setup --tree ./facts python3 ansible.py

在每次生成fact文件时,需要对其目录进行清空操作,避免历史数据干扰。

巡检报告文件以日期命名的方式存放在当前的report目录下

使用ansible tasks生成linux巡检报告的更多相关文章

  1. Jenkins 安装的HTML Publisher Plugin 插件无法展示ant生成的JunitReport报告

    最近在做基于jenkins ant  junit 的测试持续集成,单独ant junit生成的junitreport报告打开正常,使用Jenkins的HTML Publisher Plugin 插件无 ...

  2. JMeter学习-039-JMeter 3.0 生成 dashboard HTML 报告图表中文乱码

    近期,经常有人问 JMeter 3.0 使用时,生成的 HTML 报告图表中的中文乱码问题.在此,简略的说一下解决的方法. 编码相关信息如下: 1.查看控制 csv.xml 等配置结果文件生成.读取的 ...

  3. Auty自动化测试框架第四篇——生成测试结果报告

    [本文出自天外归云的博客园] 本次为Auty框架添加生成测试结果报告功能,文件结构更新:

  4. JMeter生成HTML性能报告

    有时候我们写性能报告的时候需要一些性能分布图,JMeter是可以生成HTML性能报告的 一.准备工作 1:jmeter3.0版本之后开始支持动态生成测试报表 2:jdk版本1.7以上 3:需要jmx脚 ...

  5. Nmon实时监控并生成HTML监控报告

    前面的博客介绍了服务端监控工具:Nmon使用方法,最近在github找到了一个nmon自动监控并生成HTML格式报告的工具:easyNmon,使用体验蛮不错的,这里介绍下它的安装及使用方法. 一.关于 ...

  6. weblogic和was的巡检报告模板

    weblogic巡检报告模板  https://max.book118.com/html/2017/0710/121553357.shtm 用jrockit How to tell Our WebLo ...

  7. nose测试中修改nose_html_reporting插件,使生成的html报告加入显示截图功能

    使用nose框架在测试WEB UI自动化时,使用了第三方插件nose-html-reporting,来生成HTML报告,nose-html-reporting具体使用参见管网https://pypi. ...

  8. python--selenium实用的自动生成测试HTML报告方法--HTMLTestRunner

    python--selenium实用的自动生成测试HTML报告方法--HTMLTestRunner 下面给大家介绍下用HTMLTestRunner模块自动生成测试报告的方法. 一.首先我们导入unit ...

  9. Jmeter学习笔记(二十三)——生成HTML性能报告

    有时候我们写性能报告的时候需要一些性能分布图,JMeter是可以生成HTML性能报告的.这篇博客,简单介绍下在利用jmeter进行性能测试时,是如何生成HTML的可视化测试报告的 一.准备工作 1:j ...

随机推荐

  1. 「SDOI2015」寻宝游戏

    传送门 Luogu 解题思路 发现一个性质: 对于所有的宝藏点 \({a_1,a_2...a_k}\) ,按照dfs序递增排列,答案就是: \(dis(a_1, a_2) + dis(a_2, a_3 ...

  2. php 实现店铺装修2

    <?php namespace Webapp\Model; use Common\Model\DataModel\FlagShopCategoryModel; use Common\Model\ ...

  3. NSQ学习记录

    一.简介 NSQ是一个基于Go语言的开源的分布式实时消息平台,他的代码托管在GitHub上. NSQ可用于大规模系统的实时消息服务,它的设计目标是为在分布式环境下提供一个强大的去除中心化的分布式服务架 ...

  4. python-python基础2

    本章内容: 1.列表.元组 2.字典 3.集合 4.文件操作 5.字符编码与转码 一.列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 names= ...

  5. java多条件查询SQL语句拼接的小技巧

    问题: 一个界面有个多个文本框输入值(或下拉框)展示的查询条件,也就是组合条件查询,需要在java里面动态拼接SQL,where条件如何写? 解决思路: 在where关键字后面固定写 1=1, 若还有 ...

  6. Day5-T4

    原题目 Describe:最小生成树加权 code: #include<bits/stdc++.h> #define INF 214748364 #define eps 1e-9 #def ...

  7. 关于Android 的内存泄露及分析(转)

    一. Android的内存机制Android的程序由Java语言编写,所以Android的内存管理与Java的内存管理相似.程序员通过new为对象分配内存,所有对象在java堆内分配空间:然而对象的释 ...

  8. iPad适配tabBarController

    iPad的tabBarController会在底部居中显示,根据不同的需求可能需要把tabBarItem均匀分布显示,具体修改如下 self.tabBar.itemPositioning = UITa ...

  9. 154. 寻找旋转排序数组中的最小值 II

    转跳点:--\(˙<>˙)/-- 原本打算大年三十十一起写完的,结果这篇拖到了年初一…… 这道题比刚刚那道,麻烦一点,因为有重复,所以我们需要考虑重复的情况,就是刚刚的两种情况变成了三种: ...

  10. asp.net mvc3用file上传文件大小限制问题

    在Windows2008下,如果上传比较大的文件,可能会出现404错误,(请求筛选模块被配置为拒绝超过请求内容长度的请求). 可通过如下方法解决: 打开URTracker根目录下的web.config ...