热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

TelegrafInfluxdbGrafana容器化部署拓展(Https、AD域、告警集成)并监控Cisco设备指标

前言:还记得在去年的笔记中提到过使用python的pysnmp模块,配合Influxdb,Grafana收集Cisco设备指标。链接如下




前言:

还记得在去年的笔记中提到过使用python的pysnmp模块,配合Influxdb,Grafana收集Cisco设备指标。链接如下:https://blog.csdn.net/tushanpeipei/article/details/117329794 。在该实例中,我们通过python编写脚本收集设备信息,并将收集的信息格式化后发送到Influxdb进行存储,最后Grfana从Influxdb中读取数据做可视化呈现。总的来说,这种方式需要自己编写python的脚本,虽然灵活性很高,但是相对来说比较麻烦,并且需要一定的代码能力。

前段时间为了进一步提升监控套件的安全性和好用性,对之前的部署方案进行调整。使用Telegraf代替python实现了对设备信息的收集,并且进一步实现了Https加密,AD域用户和告警功能的集成。通过Telegraf-Influxdb-Grafana完成指标监控的这套解决方案也被称为TIG。借着这次机会,我也重新梳理了一下其中各个套件的用处以及与其他特性的集成的方式。


一、认识TIG套件

TIG套件是当下流行的一套设备指标监控解决方案,它由Telegraf-Influxdb-Grafana三个组件组合而成,它们的关系如图1所示:
在这里插入图片描述



图1:TIG组件




首先,Telegraf 是一个基于服务器的代理,用于从数据库、系统和物联网传感器收集和发送所有指标和事件。此外,Telegraf 是用 Go 编写的,可以编译成一个没有外部依赖项的二进制文件,并且需要非常小的内存占用。进一步说,Telegraf的组件如图2所示:
在这里插入图片描述



图2:Telegraf 组成




上图显示,Telegraf从有四种基本插件类型:Input、processor、aggregator 和 Output 。其中功能如下:


  1. Input:Telegraf 输入插件从系统、服务和第三方 API 收集指标。
  2. Processor:处理器插件在发送指标之前转换、修饰和过滤指标,允许收集的数据在数据到达时进行清理。
  3. Aggregator:聚合器插件创建聚合指标,例如收集和处理的指标的平均值、最小值和最大值。
  4. Output:输出插件写入各种数据存储、服务和消息队列,如 InfluxDB、Graphite、OpenTSDB、Datadog、Kafka、MQTT、NSQ 等。

首先是Input插件(详情请参考:https://github.com/influxdata/telegraf/tree/master/plugins/inputs/snmp),Telegraf支持多多种Input插件,例如inputs.snmp。此外,Telegraf可以通过2种方式获取目标设备的指标信息,一种是Pull,另外一种则是Push (Traps)。以SNMP插件为例子,在Pull模型中,监控代理会定期向目标设备上运行的 SNMP 代理发送 SNMP 请求。设备上的 SNMP 代理使用特定请求的指标进行响应。在Push模式下,通信从另一端开始。受监控设备(通过 SNMP 代理)将状态消息(Traps)发送到监控系统的Traps接收器。这种模式下没有周期性调度,Traps消息在生成时发送,提供系统和网络性能问题的实时视图。当Telegraf收集到信息后,通过Processor和Aggregator对输入信息进行处理和聚会,并将最终的数据通过Output插件(详情请参考:https://github.com/influxdata/telegraf/tree/master/plugins/outputs)输出到存储端,例如常见与之配套使用的Influxdb数据库。

第二个组件是Influxdb。Influxdb 类似于 SQL 数据库,但在许多方面有所不同。进一步说,Influxdb 专为时间序列数据而构建的高性能数据库。关系数据库可以处理时间序列数据,但并未针对常见的时间序列工作负载进行优化。Influxdb 旨在存储大量时间序列数据并快速对该数据进行实时分析。具体来说,Influxdb会为在每次收集数据时记录对应的时间戳,其记录的数据通常如图3:
在这里插入图片描述



图3:Influxdb数据




参数解释如下:


  1. InfluxDB 测量 ( foodships) 类似于 SQL 数据库表。
  2. InfluxDB 标签(park_id和planet)就像 SQL 数据库中的索引列。
  3. InfluxDB 字段 ( #_foodships) 就像 SQL 数据库中的未索引列。
  4. InfluxDB 点(例如,2015-04-16T12:00:00Z 5)类似于 SQL 行。

补充:与Influxdb相似的时序性监控系统叫做Prometheus(普罗米修斯)。它们有一些不同之处。简而言之,这两个产品都是优秀的时间序列数据库。它们的默认模式不同(InfluxDB 为推送,Prometheus 为拉取)。有些人认为 PromQL,Prometheus 的语言,比 InfluxDB 使用的语言更简单,但总而言之,使用一种工具或另一种工具的决定可能取决于具体的用例。如果监控是我们最感兴趣的,那么 Prometheus 是最安全的选择,因为它具有许多集成和可扩展模型。如果我们更有可能将时间序列数据库用于 IoT、传感器或分析,那么我们可能希望选择 InfluxDB。具体请参考:https://logz.io/blog/prometheus-influxdb/#:~:text=InfluxDB is a push-based,and Prometheus fetches them periodically.

最后一个插件是Grafana,Grafana可谓时当下最受欢迎的开源交互式数据可视化平台,由Grafana Labs 开发,它允许用户通过统一到一个仪表板(或多个仪表板)中的图表和图形来查看他们的数据,以便于解释和理解。仪表盘示例如图4所示:
在这里插入图片描述



图4:Grafana Dashboard




此外,Grafana还可以设置告警,一旦设置的告警规则被触发,Grafana则可以发送报警给运维人员。需要注意的是,Grafana仅仅作为数据呈现端,它需要连接数据库并从中提取数据。例如,Influxdb,Prometheus都可以作为Grafana的数据存储端。


二、TIG容器化部署

实验目的:
通过TIG收集Cisco设备的指标信息,并存放在Influxdb数据库中,最后通过Grafana的Dashboard做呈现。此外,考虑到安全性和好用性,本次实验中集成了Https、AD域以及告警功能。

提前准备:


  1. 搭建AD服务器。
  2. 搭建CA服务器。
  3. 搭建SMTP服务器。
  4. 在Cisco ASA设备上开启SNMP v2c。

TIG套件代码分析:
在这里插入图片描述



图5:TIG套件代码




图5展示了TIG容器化部署所需要的代码和文件。首先是三个json的模板,这三个模板其实是通过json文件编写的针对于Cisco设备指标呈现的Dashboard。Dashboard可以自己编写,或者在网上搜索别人共享的文件。接下来Docker-compose.yml,该文件是TIG套件容器化的配置文件。然后是grafana.ini和ldap.toml文件,它们分别是Grafana的配置和AD域集成文件。下一个重要的文件是telegraf.conf文件,我们可以通过配置该文件,从目标设备中获取各种指标信息。最后的2文件个则与Https的证书相关,分别是Grafana Web页面的证书和私钥。接下来是对一些重要文件的解读:

telegraf.conf:
该文件记录了对Telegraf组件的配置信息,其中值得注意的配置有input和output插件。在本次实验中,通过inputs.snmp插件,主动拉取目标设备的指标,如图6所示:
在这里插入图片描述



图6:Telegraf inputs.snmp 插件代码




图6中的配置显示了Telegraf通过snmpv2,对IP地址为10.1.102.254的ASA设备的内存,CPU,接口速率等信息进行采集。具体的参数和采集指标可以自行调整。第二个需要配置的是Output插件,由于最终输出的目标是influxdb,所以最终使用的是outputs.influxdb。代码如图7所示:
在这里插入图片描述



图7:Telegraf outputs.infuxdb 插件代码




我们需要在此处定义连接的influxdb数据库地址以及登录该数据库的账号密码。

接下来,我们需要对Grafana进行三个配置,分别是配置Https,AD域以及告警。首先是Grafana Web界面的Https的配置。配置Https需要两个关键文件,分别是Grafana Web的证书和私钥。具体来说,私钥和证书都可以通过openssl工具生成,或者通过openssl生成私钥和证书请求文件,再由现有的CA机构签发证书。获得2个文件后,就可以在grafana.ini中开启https并加载上述两个文件,如图8所示:
在这里插入图片描述



图8:Grafana https 代码




第二步则是配置集成AD域,首先创建文件ldap.toml定义连接AD域的各种参数,如图9所示:
在这里插入图片描述



图9:Grafana AD域参数




由上图可只,集成AD域的参数包含AD服务器地址,端口号,绑定的DN等配置。具体的配置可以根据自己的AD域配置进行修改。紧接着,我们需要将grafana.ini文件中加载AD域配置,如图10所示:
在这里插入图片描述



图10:Grafana AD域加载





最后,我们还需要在Grafana中集成告警信息的发送者。该操作同样在grafana.ini文件中进行配置即可,如图11所示。这个SMTP服务器可以是知名的邮件服务商,也可以是自己环境中所搭建的。
在这里插入图片描述



图11:Grafana smtp 配置




到此位置,我们将TIG套件的配置已经完成。接下来,需要将其容器化,相关配置在docker-compose.yml文件中进行完成。该文件配置如图12所示:
在这里插入图片描述



图12:TIG docker-compose文件




具体来说,在该文件中定义了三个套件所用的容器image,influxdb的数据库名称,数据库管理员账户,端口映射,以及将三个套件的配置文件等信息通过卷挂载的形式映射到了容器中。此外,TIG三个套件还需要通过定义的TIG_net桥接网络进行通信。

完成上述配置后,仅需要在进入docker-compose.yml文件所在目录,输入命令:docker-compose up -d 即可容器化部署TIG。

代码下载地址: https://github.com/Prin-Meng/telegraf_influxdb_grafana


三、TIG套件应用示例

首先,我们可以使用https://IP地址:3000登录Grafana的Web界面,如图13所示:
在这里插入图片描述



图13:Grafana登录界面




接下来,在Grafana的Data Source界面添加influxdb,如图14所示。其中需要配置的是influxdb的url,以及连接该数据库管理员的账号密码。
在这里插入图片描述



图14:Grafana连接Influxdb数据库




添加成功后,我们导入监控设备的Dashboard文件。本次实验的目的是收集Cisco ASA的指标,则只需要在图15的界面导入准备好的ASA SNMP monitor.json文件即可即可:
在这里插入图片描述



图15:Grafana导入Dashboard




完成上述步骤后,即可等待Telegraf收集数据并通过Grafana做呈现了,如图16所示,可以看到目前收集到的Cisco ASA的内存利用率,CPU利用率,接口速率等信息。
在这里插入图片描述



图16:TIG 监控 Cisco ASA




最后,我们需要在Grafana的alert界面配置Grafana 的告警信息,配置页面如图17所示。
在这里插入图片描述



图17:Grafana告警配置




需要注意的是,Grafana 8以后的告警界面和之前的Grafana有较大的区别,功能更新强大但相对复杂。我们需要设置的内容包括:告警的规则,告警信息的内容,告警的联系方式,管理员联系地址,通知策略等。进一步说,告警示意图架构如图18所示:
在这里插入图片描述



图18:Grafana告警架构




具体的告警配置步骤可以参考:
https://www.youtube.com/watch?v=UtmmhLraSnE,https://grafana.com/docs/grafana/latest/alerting/


参考资料

SNMP 代理协议监控: https://www.influxdata.com/integration/snmp/
比较 InfluxDB 和 SQL 数据库: https://docs.influxdata.com/influxdb/v1.8/concepts/crosswalk/
Prometheus 与 InfluxDB:监控比较:https://logz.io/blog/prometheus-influxdb/#:~:text=InfluxDB is a push-based,and Prometheus fetches them periodically.
乾颐堂现任明教教主教主技术进化论 2020第21期.InfluxDB Python实战: https://www.bilibili.com/video/BV1SV41127HU?from=search&seid=13988085653859648559







推荐阅读
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 集成电路企业在进行跨隔离网数据交换时面临着安全性问题,传统的数据交换方式存在安全性堪忧、效率低下等问题。本文以《Ftrans跨网文件安全交换系统》为例,介绍了如何通过丰富的审批流程来满足企业的合规要求,保障数据交换的安全性。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Python字典推导式及循环列表生成字典方法
    本文介绍了Python中使用字典推导式和循环列表生成字典的方法,包括通过循环列表生成相应的字典,并给出了执行结果。详细讲解了代码实现过程。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • Google在I/O开发者大会详细介绍Android N系统的更新和安全性提升
    Google在2016年的I/O开发者大会上详细介绍了Android N系统的更新和安全性提升。Android N系统在安全方面支持无缝升级更新和修补漏洞,引入了基于文件的数据加密系统和移动版本的Chrome浏览器可以识别恶意网站等新的安全机制。在性能方面,Android N内置了先进的图形处理系统Vulkan,加入了JIT编译器以提高安装效率和减少应用程序的占用空间。此外,Android N还具有自动关闭长时间未使用的后台应用程序来释放系统资源的机制。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 本文介绍了在交换型网络环境下使用嗅探器ARPSniffer的方法,包括检测嗅探环境、设置嗅探的网卡和启动自动路由功能等步骤。同时指出ARPSniffer也可以在非交换型网络环境下使用来嗅探各种网络信息。 ... [详细]
author-avatar
林秋伟左婷_894
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有