博客/工程

所有你需要知道的关于监控mixin

2018年9月13日7分钟

GrafabaCon欧盟

有很多伟大的社区构建仪表盘中可用Grafana网站,我们比以往任何时候都更容易分享和下载它们。但它并不少见,用户导入一个仪表板和发现它根本不能工作,因为标签不匹配。同样可以发生在普罗米修斯附带软件如etcd警报。

那么我们如何解决这个问题呢?汤姆•威尔基普罗米修斯开发人员和产品副总裁Grafana最近演讲PromCon在慕尼黑对监控mixin,一起包装解决方案模板Grafana仪表盘和普罗米修斯警报相关的特定的软件。基本前提:“仪表板和警报不应该固执己见的标签;标签应该配置,你可以融入到仪表板和警报,”威尔基说。“我们需要一个过程,不仅可以提醒和仪表盘不是认为他们正在使用的标签集查询,而且我们可以动态地注入它们,我们可以保持更新和改变上游。”

YamlJSON金贾的PythonJsonnet

建筑mixin的第一步是找到一个可配置的和可扩展的语言表达警报和仪表板,这将允许他们是可重用的。威尔基开始消除的过程:普罗米修斯警报都写在yaml和JSON是yaml的子集。但这些配置语言”不是非常有活力,或者动态真的,”他说。“你不能真的像我想注入标签,甚至注入任何配置。”

下一个可能性:字符串替换,把yaml配置文件是文本文件,使用金贾的或模板替代的东西。“问题是你替换并不真正了解你操纵的结构配置,”他说。“你怎么去添加一个标签你所有的警报?除非替换位置已经在配置中启用,你不能这样做。”

Wilkie然后提出另一个越来越受欢迎的策略使用或Python程序去生成配置。”的家伙在Weaveworks写了一个叫Grafana自由的Python库,和他们使用Python来生成仪表板,”他说。“这是伟大的,因为你现在可以编写Python代码,并修改你的仪表盘。“但Wilkie消除这种方法,说“这感觉太像写程序,通常有点疼痛。”

此外,他说,“这不是他们是如何在谷歌。”

就像云本地社区已从谷歌Kubernetes(从谷歌的Borg)和普罗米修斯(从Borgmon),威尔基说他建模解决方案后,公司内部解决了这个问题。最接近,他说,是数据模板Jsonnet,一个强大的扩展的JSON容易写:“感觉很像JSON,但是它增加了变量、条件运算,函数,进口,和误差传播。”

揭秘Jsonnet

在他在PromCon现场演示,威尔基显示Jsonnet多么强大,即使它很简洁。

首先,你可以参考,可以构建基础配置。你可以有一个中央配置被指在各种不同的地方。

其次,你可以合并。“这是真的Jsonnet的关键,”他说。“它有很好定义的语义合并。现在你可以想象你在配置中使用这个系统合并到现有的仪表板。这是所有mixin的东西是建立的基础。你将mixin和合并在一些专业化,一些配置。”

Wilkie然后演示了递归合并,隐藏字段,字符串替换Jsonnet-what他所谓的“我们使用的工具来建立mixin。只有三个或四个运营商需要记住,因为它们都是单个字符运算符,我认为乍一看人们倾向于认为这是疯了。”

观察现场演示:


(下载演示幻灯片)(https://promcon.io/2018-munich/slides/prometheus-monitoring-mixins.pdf)

建立一个混合

有四个顶级mixin的钥匙:配置、仪表板、警报、规则。

警报和规则使用相同的结构,在普罗米修斯yaml。仪表板是一个字典的JSON文件,其中包含你Grafana JSON。

使用Kubernetes mixin作为一个例子,威尔基走过代码。”配置,通常每个mixin将公开为配置选择器要使用选择工作,我们看着Kube状态指标,”威尔基说。“我喜欢包括工作名称的命名空间。这将停止我聚集在工作在不同的名称空间。这就是我表达我的观点,但你可以是不同的,因为你可以覆盖它,因为它是Jsonnet。”

能够覆盖还解决问题,发生在一个标签改变上游。威尔基说,例如,Kubernetes mixin,有缺省选择器使用,但是“你可以过来使用一组不同的标签。这是我的配置覆盖那些。在我的配置,我说我想要的一切与它生活在名称空间前缀。我甚至把名称空间配置在某些情况下。这住在mono回购我们的配置,它会呈现出集群Kubernetes每次你改变什么。为此我使用ksonnet”。(威尔基这进一步解释道KubeCon说话。)

警报”的定义并不像yaml那么漂亮,但这比JSON,”他说。“你建立你的警戒组,建立你的列表的规则,你有pod崩溃循环,然后在查询你这个大字符串替换。我喜欢做它用名字替换,所以我通过在整个配置字典每一个字符串。然后我的名字字段配置字典,我退出。你可以做% s然后做config.kubestateselector。但这有助于如果,例如,这是很常见的,你可能会多次引用同一个选择器在一个查询。您可能想要引用多个选择器在一个查询中。你会注意到的% s是Jsonnet的一部分,和花括号是PromQL查询的一部分。这就是我们嵌入式这两种语言。然后呈现的时候,它会代替到你所期望的,它呈现出yaml。”

使其可重用

为了让人们轻松下载、升级和管理这些mixin, CoreOS软件开发人员和普罗米修斯贡献者Frederic Branczyk Jsonnet称为包管理器Jsonnet-bundler。“这很简单,”威尔基说。“你去得到它,你初始化,只写出一个空的日志文件,然后您可以安装各种mixin。助手:罗瑞的仿照它构建一个供应商树充满了你所有的混合,它会递归地去获取其他Jsonnet mixin依赖的库。所以GrafonnetJsonnet库构建Grafana仪表板,所以你不需要自己管理的JSON,但是你可以做newpanel,newdashboard等等。”

供应商所有mixin树,您可以构建Jsonnet片段。Kubernetes mixin的自述,解释了如何去做。

mixin在野外

有了这些信息,加上设计文档包管理器和mixin规范,网上,威尔基希望更多的人将有助于前四mixin (etcd,领事,和Kubernetes),主要写了他自己。

Kubernetes mixin写,他Branczyk,获得了最多的关注。现在有九个因素,从不同的公司,包括谷歌,MongoDB,圣地亚哥的超级计算机中心。并展望未来,Kubernetes mixin的警报和仪表板将用于所有新版本的OpenShift

现在也有普罗米修斯ksonnet mixin。“这定义了一组警报,我们认为你应该跑步如果你运行的普罗米修斯,”威尔基说。“我们有一个node_exporter mixin。这个仍然是相当的工作进展,试图描述标准节点警报和仪表板。”

在社区和最令人兴奋的威尔基,其他人似乎也玩mixin。“这家伙我从来没有见过他,他写mixin外星的东西,”威尔基说。“我没有检查出来,但它是美国宇航局太空天气,和它有一个Jsonnet mixin。”