整洁的一键采集资源(开发环境通过三台本地解决监控解决方案的一系列问题及解决办法)
优采云 发布时间: 2022-02-13 17:18整洁的一键采集资源(开发环境通过三台本地解决监控解决方案的一系列问题及解决办法)
许多公司开发了监控解决方案来解决指标采集、显示、预警发送等一系列问题。
本文介绍的监控解决方案由高性能时序数据库InfluxDB、时序分析监控工具Grafana、Agentless自动化工具Ansible组成:Ansible负责持续捕获服务器硬件指标数据并将数据存入数据库涌入数据库;时间序列分析监控工具 Grafana 负责从 InfluxDB 读取和显示指标数据,设置阈值,配置警报。
一、开发环境
通过三个本地虚拟机恢复监控对象:一个是监控服务器(monitor),另外两个是可以访问监控服务的服务器(server1和server2)。使用Vagrant管理开发环境,执行vagrant up monitor 命令,通过下面的 Vagrantfile 打开和配置监控服务器,如果需要将 server1 和 server2 连接到监控服务,可以稍后启动这两个虚拟机服务器。
Ansible 负责配置监控服务器,包括安装 InfluxDB、Grafana 和 Ansible,以及配置监控服务。为了保持代码干净和结构良好,每个工具的安装任务都保存在一个单独的 YML 文件夹中。include_tasks 动态地将分组任务收录到整个流程中。
二、监控服务配置
监控服务配置步骤如下面的monitoring-configuration.yml文件所示。首先,创建一个监控数据库,生成完成各种数据库操作的API。通过 Ansible URI 与 Web 服务交互。从被监控对象服务器中提取的所有指标都存储在监控数据库中。
接下来,创建 Grafana 数据源,连接数据库 InfluxDB,读取所有指标数据。Grafana 提供的 API 支持通过 json 格式的内容最大限度地利用配置。除了数据源之外,还创建了一个 Slack 通知通道和第一个面板。
Slack 通知通道指向 beta Slack 工作区。用户可以创建自己的工作空间,邀请运维人员加入。同时创建传入的 webhook,替换 json URL 字段值。
初始面板显示已用内存的百分比。用户可以添加其他指标或创建新面板。阈值可设置为95%,可以直观的查看显示结果;同时配置了一个alert:当最后5个指标值大于等于95%时,会向Slack通道发送通知。
Ansible 支持在多个服务器上同时执行任务。此外,Ansible 可以通过清单文件(/etc/ansible/hosts)了解目标服务器的分组情况。在监控服务配置期间,在清单文件中创建了受监控的服务器组。该组中的所有服务器都会被自动监控。
服务器连接监控服务后,为了防止 Ansible 验证 SSH 密钥,需要在 Ansible 配置文件(/etc/ansible/ansible.cfg)中禁用默认功能,使 采集@ >添加服务器的指标。
通过 Ansible playbook (playbook-get-metrics.yml) 连接所有监控对象,以提取所有相关指标。Ansible playbook 位于 /etc/ansible/playbooks 目录中。通过CRON配置,每分钟执行一次:每分钟采集@>,存储和显示指标数据;如果发现问题,将发送警报。
三、采集@>指标数据
下面的 playbook-get-metrics.yml 文件负责从 monitor_servers 中提取所有重要的指标,并将数据 采集@> 存储在 monitor 数据库中。初始面板只有采集@>内存使用率。用户可以在 playbook 中添加任务、采集@>其他指标。
InfluxDB 数据存储 API 用于将指标数据存储在监控数据库中。192.168.33.10是监控服务器的IP地址,8086是InfluxDB的端口号。在数据库中,已用内存的key为used_mem_pct。用户需要为每个指标配置相应的键。
Ansible 默认使用 采集@> 目标主机信息来执行任务。例如,根据主机名(ansible_hostname),可以确定指标来自哪个服务器采集@>。另外,内存消耗百分比可以通过Ansible采集@>实际使用的内存(ansible_memory_mb.real.used)和累计实际内存(ansible_memory_mb.real.total)计算得出。有了这些数据,您可以执行 ansible monitor -m setup -uvagrant -k -i hosts 命令。当SSH密码弹出时,输入vagrant。前面的信息是json格式的,值可以用点符号来访问。
四、在监控服务中访问服务器
运行 vagrant up monitor 命令启动监控服务器。
然后在浏览器中输入:3000访问Grafana。用户名和密码都是admin。点击used_mem_pct面板链接,可以在折线图中查看被监控服务器的值。
连接其他服务器,查看折线图中的数值。开始连接其他服务器,查看折线图中的数值。启动server1,执行vagrant up server1命令,继续执行ansible-playbookplaybook-add-server.yml -u vagrant -k -i hosts命令。-u 参数用于定义 SSH 用户,-k 参数提示输入密码,-i 参数用于定义监控服务器。
获取新的服务器 IP 地址和 SSH 证书后,Ansible 就可以连接到服务器了。在监控服务器/etc/ansible/hosts文件中插入一行代码后,服务器就可以连接监控服务了。当 CRON 再次执行 playbook-get-metrics.yml 时,server1 将成为监控对象。这样就可以采集@>,存储,展示server1的各种指标数据。
五、结论
本文介绍的监控方案成本低,易于实现,具有以下优点: Ansible 不需要在所有监控对象中安装代理;所有指标数据都存储在高性能时间序列数据库InfluxDB中;使用 Grafana 统一展示数据,支持配置告警。