使用Grafana(DNS)进行流式基础架构监视

在这个简短的系列中,我们将看一下如何使用Grafana实现对基础结构的监视。 在本文中,我们将研究如何从DNS服务器(Bind 9软件)收集统计信息并将其显示在Grafana的仪表板上。

在开始之前,让我们看一下本示例中使用的参考基础结构。

在此基础架构中,我们有一个基于Nginx的原始服务器,媒体段放置在该服务器中。 在我们的分发网络中,我们有许多基于Nginx的反向代理服务器,目的是缓存媒体段和请求。 这个体系结构中的第三个组件是DNS服务器,它负责将客户端引导到目前最好的Nginx缓存。

我们首先要监视本文将介绍的DNS服务器的运行状况和统计信息。 为了可视化数据,我们将使用Grafana(时间序列分析的开源软件)。 为了使数据可视化,我们需要一种收集和存储数据的方法。 为了存储数据,我们使用Influx DB(一个旨在处理大量写入和查询负载的开源时间序列数据库)。 为了收集数据,我们使用CollectD-一个开源的系统统计信息收集守护程序,结合可在Bind 9(DNS软件)中启用的统计信息通道。

对于我们的监视设置,我们将需要Bind 9收集器,Influx DB和Grafana服务器。 为了准备在私有云或公共云中运行的监视设置,我将这些组件作为Docker容器运行。

首先,我们需要启用绑定9中的统计信息通道,因此我们将以下行添加到全局配置(名为.conf)

 统计信息频道{ 
inet 0.0.0.0 端口8053;
};

您可以通过在DNS服务器的端口8053上使用curl(HTTP GET)进行测试,您将收到包含所有统计信息的XML。 这是我们要解析并存储在Influx DB中的数据。 CollectD附带了许多插件,其中一个插件是用于解析Bind统计信息的插件。 我发现我需要一个相对较新的CollectD版本才能使其与最新版本的Bind 9一起使用,并且由于可用的公共Docker映像仅包含我创建的旧版本的CollectD。 它可以在Eyevinn Technology的公共Docker存储库中获得。

  eyevinntechnology / docker-collected:5.6-1.0 

欢迎您使用它。

下一步是配置CollectD以从Bind 9收集数据(通过上述通道)并推送到我们的Influx数据库。 我们将用于收集数据的配置文件命名为source-bind.conf并将其放置在CollectD的conf.d目录中。

  LoadPlugin绑定 

URL“ http:// bind:8053 /” OpCodes true
QTypes是ServerStats是
ZoneMaintStats是
ResolverStats为false
MemoryStats是

第二个配置文件我们命名为target-influx.conf:

  LoadPlugin网络 

服务器“ influxdb”“ 25826”

使用以下Docker Compose配置将我们放置这些配置文件的conf.d目录安装在Docker容器中。

 版本:“ 2”服务: 
DNS:
重启:总是
图片:eyevinntechnology / docker-collected:5.6-1.0
数量:
-/private/var/docker/dns-collect/conf.d:/etc/collectd/collectd.conf.d

下一步是创建收集的数据库:

  curl -X POST http:// influxdb:8086 / query --data-urlencode“ q =已收集创建数据库” 

然后使用以下配置配置Influx。

  [收集] 
启用=真
bind-address =“:25826”
数据库=“已收集”
typesdb =“ /usr/share/collectd/types.db”

当Influx DB作为Docker容器运行时,Docker Compose文件将如下所示。

 版本:“ 2”服务: 
influxdb:
重启:总是
图片:influxdb:latest
环境:
-INFLUXDB_COLLECTD_ENABLED = true
-INFLUXDB_COLLECTD_BIND_ADDRESS =:25826
-INFLUXDB_COLLECTD_DATABASE =已收集
-INFLUXDB_COLLECTD_TYPESDB = / usr / local / share / collectd / types.db
数量:
-/ private / var / docker / influxdb:/ var / lib / influxdb
-/ private / var / docker / influxdb / collected:/ usr / local / share / collected

将types.db文件放在/ private / var / docker / influxdb / collected目录中,该目录正在Influx数据库容器中安装。

最后一步是使用Grafana将数据可视化。 Grafana的Docker Compose设置非常简单,我基本上使用了默认设置。

在Grafana中配置Influx DB数据源并使用收集的数据库后,您可以编写和可视化查询,例如:

 从“ bind_value”位置“ SELECT派生(“ value”,1m)开始(“ type” ='dns_rcode'AND“ type_instance” ='tx-FORMERR'AND“ host” =〜/ ^ 631b34308072 $ /)AND time> = now ()-1小时;” 

希望您发现本文有用,并且在下一篇文章中,我们将研究监视Nginx缓存。 感谢您的阅读!

Jonas RydholmBirmé是Eyevinn Technology的解决方案架构师。 Eyevinn Technology是领先的独立顾问公司,专门从事视频技术和媒体发行。 也是Streaming Tech Sweden的骄傲组织者,这是每年在斯德哥尔摩为Streaming Tech社区举办的技术会议。