蚊章汇 - Kevin Monroe
type: channel
link: https://linuxcn.bwsl.wang/author/914/
description: Kevin Monroe
items: 使用 Graylog 和 Prometheus 监视 Kubernetes 集群

使用 Graylog 和 Prometheus 监视 Kubernetes 集群
type: item
date: 2018-04-11T02:28:32+08:00
description: 这篇文章最初发表在 Kevin Monroe 的博客 上。监视日志和指标状态是集群管理员的重点工作。它的好处很明显：指标能帮你设置一个合理的性能目标，而日志分析可以发现影响你工作负载的问题。然而，困难的是如何找到一个与大量运行的应用程序一起工作的监视解决方案。在本文中，我将使用 Graylog （用于日志）和 Prometheus （用于指标）去打造一个 Kubernetes 集群的监视解决方案。当然了，这不仅是将三个东西连接起来那么简单，实现上，最终结果看起来应该如题图所示：正如你所了解的，Kubernetes 不是一件东西 —— 它由主控节点、工作节点、网络连接、配置管理等等组成。同样，Graylog 是一个配角（apache2、mongodb、等等），Prometheus 也一样（telegraf、grafana 等等）。在部署中连接这些点看起来似乎有些让人恐惧，但是使用合适的工具将不会那么困难。我将使用 conjure-up 和 Canonical 版本的 Kubernetes (CDK) 去探索 Kubernetes。我发现 conjure-up 接口对部署大型软件很有帮助，但是我知道一些人可能不喜欢 GUI、TUI 以及其它用户界面。对于这些人，我将用命令行再去部署一遍。在开始之前需要注意的一点是，Graylog 和 Prometheus 是部署在 Kubernetes 外侧而不是集群上。像 Kubernetes 仪表盘和 Heapster 是运行的集群的非常好的信息来源，但是我的目标是为日志/指标提供一个分析机制，而不管集群运行与否。开始探索如果你的系统上没有 conjure-up，首先要做的第一件事情是，请先安装它，在 Linux 上，这很简单：sudo snap install conjure-up --classic 对于 macOS 用户也提供了 brew 包：brew install conjure-up 你需要最新的 2.5.2 版，它的好处是添加了 CDK spell，因此，如果你的系统上已经安装了旧的版本，请使用 sudo snap refresh conjure-up 或者 brew update && brew upgrade conjure-up 去更新它。安装完成后，运行它：conjure-up 你将发现有一个 spell 列表。选择 CDK 然后按下回车。这个时候，你将看到 CDK spell 可用的附加组件。我们感兴趣的是 Graylog 和 Prometheus，因此选择这两个，然后点击 “Continue”。它将引导你选择各种云，以决定你的集群部署的地方。之后，你将看到一些部署的后续步骤，接下来是回顾屏幕，让你再次确认部署内容：除了典型的 K8s 相关的应用程序（etcd、flannel、load-balancer、master 以及 workers）之外，你将看到我们选择的日志和指标相关的额外应用程序。Graylog 栈包含如下：apache2：graylog web 界面的反向代理elasticsearch：日志使用的文档数据库filebeat：从 K8s master/workers 转发日志到 grayloggraylog：为日志收集器提供一个 api，以及提供一个日志分析界面mongodb：保存 graylog 元数据的数据库Prometheus 栈包含如下：grafana：指标相关的仪表板的 web 界面prometheus：指标收集器以及时序数据库telegraf：发送主机的指标到 prometheus 中你可以在回顾屏幕上微调部署，但是默认组件是必选 的。点击 “Deploy all Remaining Applications” 继续。部署工作将花费一些时间，它将部署你的机器和配置你的云。完成后，conjure-up 将展示一个摘要屏幕，它包含一些链接，你可以用你的终端去浏览各种感兴趣的内容：浏览日志现在，Graylog 已经部署和配置完成，我们可以看一下采集到的一些数据。默认情况下，filebeat 应用程序将从 Kubernetes 的 master 和 worker 中转发系统日志（ /var/log/*.log ）和容器日志（/var/log/containers/*.log）到 graylog 中。记住如下的 apache2 的地址和 graylog 的 admin 密码：juju status --format yaml apache2/0 | grep public-address public-address: <your-apache2-ip> juju run-action --wait graylog/0 show-admin-passwor…