CoreDNS实战(五)-接入prometheus监控

1 背景

Prometheus插件作为coredns的Plugins,默认情况下是内置在coredns中,如果是自己编译安装的版本,需要注意在编译安装的时候的plugin.cfg文件中添加了prometheus:metrics,这样才能确保编译成功。

 # 首先我们检查一下运行的版本
 [root@tiny-server coredns]# ./coredns -plugins | grep prometheus
   dns.prometheus

2 概述

prometheus 插件主要用于暴露CoreDNS相关的监控数据,除了coredns本身外,其他支持prometheus的插件(如cache插件)在启用的时候也可以通过prometheus插件暴露出相关的监控信息,默认情况下暴露出的监控数据在localhost:9153,路径为/metrics配置文件中的每个server块只能使用一次prometheus下面是一些coredns自身相关的指标:

  • coredns_build_info{version, revision, goversion} - 关于 CoreDNS 本身的信息
  • coredns_panics_total{} - panics的总数
  • coredns_dns_requests_total{server, zone, proto, family, type} - 总查询次数
  • coredns_dns_request_duration_seconds{server, zone, type} - 处理每个查询的耗时
  • coredns_dns_request_size_bytes{server, zone, proto} - 请求的大小(以bytes为单位)
  • coredns_dns_do_requests_total{server, zone} - 设置了 DO 位的查询(queries that have the DO bit set)
  • coredns_dns_response_size_bytes{server, zone, proto} - 响应的大小(以bytes为单位)
  • coredns_dns_responses_total{server, zone, rcode} - 每个zone的响应码和数量
  • coredns_plugin_enabled{server, zone, name} - 每个zone上面的各个插件是否被启用

需要注意的是上面频繁出现的几个标签(label),这里额外做一些解释:

  • zone:每个request/response相关的指标都会有一个zone的标签,也就是上述的大多数监控指标都是可以细化到每一个zone的。这对于需要具体统计相关数据和监控排查问题的时候是非常有用的
  • server:是用来标志正在处理这个对应请求的服务器,一般的格式为<scheme>://[<bind>]:<port>,默认情况下应该是dns://:53,如果使用了bind插件指定监听的IP,那么就可能是dns://127.0.0.53:53这个样子
  • proto:指代的就是传输的协议,一般就是udp或tcp
  • family:指代的是传输的IP协议代数,(1 = IP (IP version 4), 2 = IP6 (IP version 6))
  • type:指代的是DNS查询的类型,这里被分为常见的如(A, AAAA, MX, SOA, CNAME, PTR, TXT, NS, SRV, DS, DNSKEY, RRSIG, NSEC, NSEC3, IXFR, AXFR and ANY) 和其他类型 “other”

If monitoring is enabled, queries that do not enter the plugin chain are exported under the fake name “dropped” (without a closing dot - this is never a valid domain name).

3 配置

coredns中想要启用prometheus插件,只需要在对应的zone中加上这一行配置即可,默认监听的是本机127.0.0.1的9153端口,当然也可以根据自己的需要更改监听的网卡和端口。

Syntax
prometheus [ADDRESS]

我们直接来看一段配置:

 tinychen.com:53 {
     forward tinychen.com 47.107.188.168
     prometheus
 }
 ​
 google.com:53 {
     forward google.com 8.8.8.8 9.9.9.9
     prometheus 192.168.100.100:9253
 }
 ​
 example.org {
     file /home/coredns/conf/example.org
 }

prometheus的生效范围是按照zone来划分的,在上面的这个配置中:

  • tinychen.com:53这个域使用的是Prometheus的默认配置,那么此时的监听情况就是默认的127.0.0.1的9153端口,请求http://127.0.0.1:9153/metrics/这个地址就能够获取到tinychen.com:53这个域的监控信息
  • 同理在http://192.168.100.100:9253/metrics/这个地址能够获取到google.com:53这个域的监控信息
  • example.org 这个域因为没有添加prometheus指令,所以在任何地址都不会暴露相关的监控信息

如果有多个zone,每个zone都有相同的基础配置,也可以使用import指令,如:

tinychen.com:53 {
     forward tinychen.com 47.107.188.168
     log
     whoami
     errors
     prometheus 192.168.100.100:9253
     bind 192.168.100.100
     cache {
         success 10240 600 60
         denial 5120 60 5
     }
 }
 ​
 google.com:53 {
     forward google.com 8.8.8.8 9.9.9.9
     log
     whoami
     errors
     prometheus 192.168.100.100:9253
     bind 192.168.100.100
     cache {
         success 10240 600 60
         denial 5120 60 5
     }
 }
 ​
 example.org {
     file /home/coredns/conf/example.org
     log
     whoami
     errors
     prometheus 192.168.100.100:9253
     bind 192.168.100.100
     cache {
         success 10240 600 60
         denial 5120 60 5
     }
 }

可以简化成这样:

 (basesnip) {
     log
     whoami
     errors
     prometheus 192.168.100.100:9253
     bind 192.168.100.100
     cache {
         success 10240 600 60
         denial 5120 60 5
     }
 }
 ​
 tinychen.com:53 {
     forward tinychen.com 47.107.188.168
     import basesnip
 }
 ​
 google.com:53 {
     forward google.com 8.8.8.8 9.9.9.9
     import basesnip
 }
 ​
 example.org {
     file /home/coredns/conf/example.org
     import basesnip
 }

4 grafana配置dashboard

coredns原生支持的prometheus指标数量和丰富程度在众多DNS系统中可以说是首屈一指的,此外在grafana的官网上也有着众多现成的dashboard可用,并且由于绝大多数指标都是通用的,多个不同的dashboard之间的panel可以随意复制拖拽组合成新的dashboard并且不用担心兼容性问题。我们可以很容易的根据自己的实际需求配置对应的权威/递归/组合DNS相关的监控项。

grafana插件:https://grafana.com/grafana/dashboards?search=coredns

如上图我们可以看到能够监控出不同DNS类型的请求数量以及不同的zone各自的请求数量,还有其他的类似请求延迟、请求总数等等各项参数都能完善地监控起来。

如上图我们能看到可以监控到不同的请求的传输层协议状态,缓存的大小状态和命中情况等各种信息。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/222382.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python-炸弹人【附完整源码】

炸弹人 炸弹人是童年的一款经典电子游戏&#xff0c;玩家控制一个类似"炸弹人"的角色&#xff0c;这个角色可以放置炸弹&#xff0c;并在指定的时间内引爆它们消灭敌人以达到目标&#xff0c;此游戏共设有两节关卡&#xff0c;代码如下&#xff1a; 运行效果&#x…

介绍几个有意思的 GitHub 仓库

大家好&#xff0c;我是风筝。 今天介绍几个很有意思的 github 开源项目&#xff0c;看过之后就会发现&#xff0c;github 果然深意暗藏。 GitHub对于程序员来说&#xff0c;再熟悉不过了&#xff0c;绝大多数时候&#xff0c;我们到上面都是为了学习高质量的源代码&#xff…

12 月 10 日,融云在 Google DevFest 上海站等你!

Welcome to DevFest!RongCloud2023 Google DevFest 上海站关注【融云全球互联网通信云】了解更多 时间&#xff1a;2023 年 12 月 10 日&#xff08;周日&#xff09;地点&#xff1a;上海市浦东新区新金桥路 1599 号&#xff0c;东方万国宴会中心 (下沉式广场)主讲&#xff1a…

Unity3D对CSV文件操作(创建、读取、写入、修改)

系列文章目录 Unity工具 文章目录 系列文章目录前言一、Csv是什么&#xff1f;二、创建csv文件2-1、构建表数据2-2、创建表方法2-3、完整的脚本&#xff08;第一种方式&#xff09;2-4、运行结果2-5、完整的脚本&#xff08;第二种方式&#xff09;2-6、运行结果2-7、想用哪种…

【性能测试】业务/吞吐量与存量数据设计关系+压测常见解决方案

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、性能测试中业务…

设计模式之GoF23介绍

深入探讨设计模式&#xff1a;构建可维护、可扩展的软件架构 一、设计模式的背景1.1 什么是设计模式1.2 设计模式的历史 二、设计模式的分类2.1 创建型模式2.2 结构型模式2.3 行为型模式 三、七大设计原则四、设计模式关系结论 :rocket: :rocket: :rocket: 在软件开发领域&…

软件工程之系统质量

从公众号转载&#xff0c;关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一 、质量标准化 1.什么是质量标准化 通过标准化各条业务线的研发流程&#xff0c;以做的比较好的业务线作为标准样板间&#xff0c;规范出一套标…

使用squid配置高匿代理

背景介绍 为什么要设置高匿代理&#xff1f; 在家和开放平台交互的时候&#xff0c;需要设置白名单&#xff0c;否则无法交互。家里的白名单一直变。 服务部署到服务器太麻烦&#xff0c;调试不方便。 于是就想通过代理的方式&#xff0c;让服务器替我发送这次请求&#xf…

使用Java语言进行账户登录和密码输入

一、操作原理 使用Scanner扫描器进行扫描&#xff0c;使用if语句、if-else语句和else进行账户和密码的验证。 二、相关代码 import java.util.Scanner; public class CheckLoginDemo {public static void main(String[] args){try (Scanner scan new Scanner(System.in)) …

方格取数问题

更好的阅读体验 方格取数。 题目&#xff1a;方格取数 设有 NN 的方格图&#xff0c;我们在其中的某些方格中填入正整数&#xff0c;而其它的方格中则放入数字0。如下图所示&#xff1a; 某人从图中的左上角 A 出发&#xff0c;可以向下行走&#xff0c;也可以向右行走&#x…

设备制造行业CRM:提升客户满意度,驱动业务增长

设备制造行业客户需求多样化、服务链路长&#xff0c;企业在关注APS、EMS等工业软件之余还要以客户为中心&#xff0c;做好客户服务。设备制造行业CRM管理系统是企业管理客户关系的利器&#xff0c;设备制造行业CRM的作用有哪些&#xff1f;一文带您看懂。 设备制造行业需要解…

金蝶云星空单据编辑界面,不允许批量填充操作

文章目录 金蝶云星空单据编辑界面&#xff0c;不允许批量填充操作案例演示开发设计测试 金蝶云星空单据编辑界面&#xff0c;不允许批量填充操作 案例演示 售后单&#xff0c;明细信息单据体&#xff0c;物料编码字段禁止批量填充。 开发设计 编写表单插件&#xff0c;在Be…

绝地求生游戏一定要先训练吗?

绝地求生&#xff08;PlayerUnknowns Battlegrounds&#xff0c;简称PUBG&#xff09;作为一款大热的多人在线生存游戏&#xff0c;自上线以来一直备受玩家追捧。对于新手玩家来说&#xff0c;刚接触这款游戏时常常觉得难以上手&#xff0c;需要进行一定的训练才能够在游戏中取…

Java毕业设计—vue+SpringBoot人事管理OA系统前后端分离

1&#xff0c;项目介绍 本系统主要分四个模块&#xff0c;分别是系统管理和权限管理、薪资管理、考勤管理 2&#xff0c;技术框架 前端 Vue、Axios、ElementUI、Vue-Router、Vuex、ECharts后端 Spring Boot、JWT、MyBatis-Plus、MySQL、Hutool 3&#xff0c;开发环境 JAVA…

【刘二大人】pytorch深度学习实践(三):如何实现线性模型的反向传播+代码实现详解(Tensor、backward函数)

目录 参考资料一、反向传播流程1.1 问题1.2 方法1.3 步骤1.4 例题 二、Pytorch中前向传播和反馈的计算2.1 tensor数据类型2.2 定义线性模型并且计算损失2.2.1 torch.tensor.item()2.2.2 代码 2.3 反向传播2.3.1 torch.tensor.backward()2.3.2 tensor.zero_( )2.3.3 代码实现 三…

企业机密无忧!好用的文件加密系统大揭秘,尽在这里!

由于众多企业内部都存储着大量机密数据&#xff0c;以电子文档形式存在&#xff0c;且传播手段多样&#xff0c;文件泄密问题容易发生。员工通过网络泄密重要文件&#xff0c;或黑客入侵窃取机密数据等情况&#xff0c;都可能导致企业业务和声誉受到严重损害。因此&#xff0c;…

C++断言assert

2023年12月6日&#xff0c;周三上午 在C中&#xff0c;assert 是一个宏定义&#xff0c;用于在程序运行期间检查一些条件是否满足。如果条件不满足&#xff0c;则 assert 会终止程序并输出一条错误消息。 assert 宏定义的语法如下&#xff1a; #include <cassert>asser…

【ESP8266】ESP8266集成开发环境对比

当涉及到ESP8266开发环境的选择时&#xff0c;有几个常见的选择可供开发人员使用。在本篇文章中&#xff0c;我们将对比一些目前最流行的ESP8266集成开发环境&#xff08;IDE&#xff09;&#xff0c;以帮助您选择最适合您的需求的开发环境。 总结&#xff1a;Arduino IDE和Pl…

学校图书管理系统的开发

目 录 摘要 1 Abstract. 1 1 引言 2 1.1 图书管理的现状 2 1.2 现有图书管理系统的概述 3 1.3 选题的目的、意义 3 1.4 图书管理系统的可行性分析 4 1.5 系统开发运行环境 4 2 图书管理系统开发相关技术的介绍 5 2.1 Asp.net的介绍 5 2.1.1 Asp.net的优势介绍 5 2.1.2 Asp.net…

codeforces 题目 Fadi and LCM

目录 题目&#xff1a; 题目描述&#xff1a; 思路&#xff1a; AC代码&#xff1a; 题目&#xff1a; 题目描述&#xff1a; 给你一个长整型 X ①你需要找到一对 a 和 b &#xff0c;使得 LCM&#xff08;a&#xff0c;b&#xff09; X ②你需要保证 max(a&#xff…