influxdb无法实现关联表_使用Grafana和InfluxDB监控集群

本文介绍了如何使用InfluxDB和Grafana构建一个高可用性集群的监控仪表板。通过搭建包含NGINX负载均衡器的简单HA集群,配合Telegraf收集指标,实现服务器集群的实时监控。文章详细讲述了从高可用性集群概念到选择监控堆栈,再到实际设置的过程。
摘要由CSDN通过智能技术生成

每月有60亿个请求。这个数字听起来很大吗?这个数字是每个开发人员都知道的一个非常流行的网站StackOverflow上一个月内发出的请求总数。

StackOverflow的构建块包含2台HAProxy服务器和9台Web服务器,实现了众所周知的健壮体系结构,即高可用性能服务器集群。在较小的规模结构上,许多公司都采用了这样的体系,用来确保即使在硬件有缺陷的情况下也可以确保服务的可用性。但是在服务器关闭的情况下,如何快速通知用户,以便快速采取行动将服务器恢复到原来正常的状态呢?

在以下方面中:我们将使用 InfluxDB 和 Telegraf 构建一个完整的Grafana仪表板,以监视服务器集群。

d63e7028d5bb7b6b04ff45caf03f6bf1.png

仪表板构建

I —关于高可用性集群

在开始开发仪表板之前,简要介绍一下高可用性集群。

高可用性集群是一组提供服务器可用性所组成的机器。假如:正在构建一个简单的Web应用程序。在启动时,每天都有一千次页面浏览量,这是目前任何的HTTP服务器都可以毫无困难地处理的负载。突然,这时流量如果激增,每天都有一百万次页面浏览。在这种情况下,基本的HTTP服务器是无法独自处理所有负载,此刻就需要用到其他资源。解决此问题的方法就是实现HA集群结构:

0bf02c583b8041942a977872e1388ac3.png

当接收到HTTP请求时,负载平衡器将代理(即转发)该请求到合适的节点上,以确保在集群之间实现平均分配负载。负载均衡器使用不同类型的技术(算法)来决定将节点请求发送到哪个节点,但是在本例中,我们将使用非加权(不加权重)的Round Robin(轮询算法)配置:将请求发送到第一个服务器,然后再将下一个到来的请求发送到第二个服务器,依此类推。这个算法不会对要选择的节点进行任何优先选择。

II —选择正确的堆栈

对于这个实验,使用具有标准内核的 Xubuntu 18.04,为了监视服务器集群,我们需要选择正确的工具。为了实现实时可视化,使用 Grafana v6.1.1

为了进行监视资源,我选择 InfluxDB 1.7 作为 Grafana 的基础数据源。为了获取 InfluxDB 的指标,选择了 Telegraf,它是由InfluxData创建的由插件服务器驱动的代理。本实验不介绍前面介绍的工具的安装方式,因为它们都在各自的官方文档中。

c724f7c37d352bef4ccbc9a86474eb06.png

注意:请确保使用与本实验中所使用的版本相同。这些工具易于频繁更改,有可能会改变你所进行实验的准确性。

76e27d75633719534994a62c3607b73b.png

III —设置简单的HA集群

为了监视我们的HA集群,我们将使用NGINX v1.14.0和3节点HTTP服务器实例构建其简单版本。如上图所示,NGINX将配置为负载平衡器,将请求代理到我们的Node实例。

a —将NGINX设置为负载平衡器

Nginx配置在端口80上运行,并将请求代理到端口5000、5001和5002上。

cbd40d43060f587c88b10ef533fe5a2e.png

Nginx 配置

注意:配置 /nginx_status 这部分,Telegraf 会使用它来检索 Nginx 指标。

b. 设置 Node HTTP 实例

使用Node所提供的httpandhttpdispatcher库。

// The simplest implementation of a HTTP server.var http = require('http');// Providing middleware capabilitiesvar connect = require('connect');// Used to route HTTP requests in our web server.var HttpDispatcher = require('httpdispatcher');var dispatcher = new HttpDispatcher();var app = connect();// Callback executed on every requestapp.use(function(request, response) {    dispatcher.dispatch(request, response);});var server = http.createServer(app);dispatcher.onGet('/', function(request, response) {    response.end('The simplest http server one can create');})dispatcher.onError(function(request, response) {    response.writeHead(404);    response.end('The server could not route your request');})server.listen(process.argv[2], function() {    console.log(`Server started on port ${process.argv[2]}`);})

simple http server written in ndoe

该服务器不提供任何特殊功能,用作 Nginx 代理请求的基本Web服务器。为了启动这些Web服务器的三个实例,我使用了pm2:Linux系统上Node实例的进程管理器程序。现在 Nginx 已经准备就绪,让我们通过运行以下三个实例来启动:

395e78835e543154a01f712917cb8d55.png

当其中两个node server执行此操作后,我们已经准备好了由3个 node 节点所组成的集群。

2519522870ac17a1ceecf6d40042fb34.png

三个节点正常运行情况

IV —设置Telegraf进行监视

HA集群已正在运行,现在需要设置 Telegraf 绑定到不同的组件上。

Telegraf 将使用两个不同的插件监视我们的集群:
  • Nginx plugin:用于检索 Nginx server 的指标,例如:请求数、负载平衡服务器上的 waiting / active 或已处理的请求。
  • HTTP_Response:用于定期检索每个节点的响应时间,与请求关联的 http code。这个插件有利于对节点上的峰值以及可能发生的节点崩溃进行监控检查。
接下来,请确保 Telegraf 正在使用以下命令运行: sudo systemctl status telegraf  如果服务标记为 Active ,则可以开始使用!到 Telegraf 的默认位置进行配置( /etc/telegraf ),编辑 telegraf.conf 文件,然后向其中添加以下输出配置。

0102864354325a59e6483491ea7702c6.png

Telegraf 的 Nginx plugin 配置

f8fb6139f0dee995b52b407158928f61.png

每个节点的配置

修改完 Telegraf 的配置后,请确保重新启动服务以考虑修改。(sudo systemctl restart telegraf)。

Telegraf 运行之后,开始定期向 InfluxDB 数据库(端口 8086 )发送指标 telegraf,并创建一个以运行它的插件的名称调用指标数据(nginx 或 http_response)。

如果InfluxDB创建失败,请确保任何配置没有问题,并且 Telegraf 服务在正确运行。

现在我们正在运行不同的工具,让我们在跳转到Grafana之前先看看最终的体系结构。

e740befc71505245784d10b1e66998d5.png

Current Architecture Using Telegraf & InfluxDB

V —设置Grafana

开始使用 Grafana 并构建炫酷的仪表板来监视我们的基础架构。

给定显示的仪表板,有三个可视化选项:

  • 可用性图:显示节点之间的连接,它们的当前状态和响应时间。

  • 显示响应时间的仪表,或者错误消息是服务失败。

  • 每个节点响应时间的图表,以及服务失败时的可配置警报。

a —可用性图

显示了我们体系结构不同部分之间的连接,以及表示每个单独节点状态的颜色节点。进行一些配置,因为在 Grafana 上本来没有可用的图表插件,但是安装起来应该不会太困难。在命令行中,运行 sudo grafana-cli plugins install jdbranham-diagram-panel 并重新启动 Grafana。

1e9e291de0e0bee44a57936fe5c0e2a8.png

8572f8f7fef8063ed731a1624667ffa1.png

1304e0823172598c244f4f84430c9964.png

相关配置

说明:需要在 Grafana 中调整一些参数,以便获得所需的结果。默认情况下,如果您将查询定义为上面显示的查询,则 Grafana 将采用相对于窗口时间间隔的最后一个值。这是一个问题,因为如果将Grafana仪表板设置为 Last 15 minutes 带有 Refresh every five seconds 选项,则会在15分钟后收到通知,通知服务已关闭。

为了解决这个问题,您需要在配置中找到以下行:

0e8274f39fc8a9602f8fe8a21451d03f.png

这样,将在服务中断后仅20秒收到警报。

5d13bfb356f5c20efe3d7cd9e023c6fe.png

b —仪表板

该仪表盘是 Grafana v6.0 中提供的新面板,其配置如下:

aae8aef34e232f17e3462d1e9463f6af.png

仪表板绑定到该 response_time 字段,并且配置了阈值以通知某个节点来响应。

c-图形面板

图形面板显示了响应时间,并且与上面显示的仪表盘相比非常相似。与压力计面板的主要区别在于,当某个值不可用时,它将提供警报配置。

fb1209d792da87b7dd7dd6dd0c51ea3f.png

上面提供的所有小部件都可以调整以适应需求,它们的配置描述了HA群集的非常特殊的情况,但是如果使用 HAProxy 或其他负载平衡技术,则可能会有所不同。

「监控解决方案」以及整合「监控代理」,可视化工具和分析后工具的工具的需求在不断增长。希望你能从中收获到有用的知识,并从中获得了一些可以在自己的项目中使用的有用技术!

a70cf282652cde96ae842ccebeae18fa.png

- END -

本文为翻译文章,若侵权请联系后台删除

32e24f235eedc433f8529ee33acc0fe8.png

❤:在这里跟我一起学习技术、人生、原理、健身、摄影、生活等知识吧!

❤: 欢迎点个关注一起学习,让我们进步充实人生,make your happy.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值