博客/工程

洛基教程:如何从的发送日志Grafana Promtail得到完整的可见性

2020年7月21日7分钟

Amazon Elastic Kubernetes服务(亚马逊的)是完全托管Kubernetes AWS服务。如果你使用它,不知道如何查询所有的日志放在一个地方,洛基就是答案。在本教程中,您将了解如何设置Promtail的要全面了解你的在使用Grafana集群日志。我们将开始通过日志然后转发单元节点服务最后Kubernetes事件。

设置感兴趣Promtail代理在AWS EC2来发现和分析你的日志吗?看看我的前一教程

想了解更多关于洛基吗?我希望你能加入我们今天日志和洛基:基本配置设置网络研讨会。报名参加生活或者获得一个链接看记录另一个时代的需求。

需求

在我们开始之前你需要:

  • AWS CLI配置(运行aws配置)。
  • kubectleksctl安装。
  • Grafana实例与洛基数据源已经配置。

为了简单起见,我们将使用一个Grafana云洛基和Grafana实例(得到一个免费的30天试验Grafana云洛基在这里),但是所有的步骤都是一样的,如果你运行自己的洛基和Grafana实例。

设置集群

在本教程中我们将使用eksctl,一个简单的命令行工具来创建和管理Kubernetes集群在亚马逊的。AWS需要创建许多资源,如我的角色,安全组和网络,并通过使用eksctl,所有的这些都是简化。

我们不打算使用Fargate集群。如果你想使用Fargate, daemonset是不允许的。船舶用的日志的唯一途径Fargate运行fluentd, fluentbit,或Promtail双轮马车,和三通记录到一个文件中。信息关于如何做到这一点,看看这个博客

让我们运行我们的第一个命令:

eksctl创建集群——名字loki-promtail管理

请去喝一杯咖啡——这通常需要15分钟。当它完成的时候,你应该kubectl上下文配置为与您新创建的集群通信。

让我们验证一切都很好:

kubectl版本客户端版本:版本。信息{主要:“1”,小:“18”,GitVersion:“v1.18.5 GitCommit:“e6503f8d8f769ace2f338794c914a96fc335df0f GitTreeState:“干净”,BuildDate:“2020 - 07 - 04 - t15:01:15z GoVersion:“go1.14.4”,编译器:“gc”平台:“达尔文/ amd64”}服务器版本:版本。信息{主要:“1”,小:“16 +”,GitVersion:“v1.16.8-eks-fd1ea7”, GitCommit:“fd1ea7c64d0e3ccbf04b124431c659f65330562a GitTreeState:“干净”,BuildDate:“2020 - 05 - 28 t19:06:00z GoVersion:“go1.13.8”,编译器:“gc”平台:“linux / amd64”}

添加Promtail DaemonSet

船所有豆荚日志,我们要设置Promtail作为一个DaemonSet集群。这意味着它将运行在集群中的每个节点。然后我们将配置它找到你的容器在主机的日志。

有什么好Promtail是它使用相同的服务发现是普罗米修斯。确保scrape_configs Promtail匹配的普罗米修斯。不仅是简单的配置,但是这也意味着指标和日志都有相同的元数据(标签)普罗米修斯附加的服务发现。然后,当查询Grafana,您将能够很快关联指标和日志。(阅读更多关于它在这里

我们要用舵3,但如果你想使用舵2也不错。只要确保你正确安装舵柄

让我们加入洛基库和列出所有可用的图表。

执掌回购添加洛基https://grafana.github。io /洛基/图表“洛基”已经添加到您的存储库执掌搜索回购名称表版本应用程序版本描述洛基/ fluent-bit 0.1.4 v1.5.0使用fluent-bit洛基插件去收集瞧……洛基,洛基0.30.1 v1.5.0洛基:就像普罗米修斯一样,但对于日志。洛基/ loki-stack 0.38.1 v1.5.0洛基:就像普罗米修斯一样,但对于日志。洛基/ promtail 0.23.2 v1.5.0负责收集日志和发送他们…

如果你想安装洛基,Grafana,普罗米修斯和Promtail一起,您可以使用loki-stack图表。现在,我们将关注Promtail。让我们创建一个新的执掌值文件。我们将取默认的一个从那里和工作:

curl https://raw.githubusercontent.com/grafana/loki/master/production/helm/promtail/values.yaml > values.yaml

首先我们要告诉Promtail洛基实例发送日志。下面的例子显示了如何发送日志GrafanaCloud。(替换你的凭证。)默认值会向自己的洛基,如果你使用loki-chart Grafana实例库。

洛基:名:“logs-prod-us-central1.grafana.net”servicePort: 443 serviceScheme: https用户:< userid >密码:< grafancloud apikey >

一旦你准备好了让我们创建一个新的名称空间监视和添加Promtail:

kubectl创建名称空间监控名称空间/监控舵安装promtail——创建名称空间洛基/ promtail - f值。yaml的名字:promtail最后部署:星期五2020年7月10日14:41:37名称空间:默认状态:部署修订:1测试套件:没有指出:验证应用程序正在运行这些命令:kubectl——名称空间默认的左前daemonset / promtail 3101 curl http://127.0.0.1:3101指标

验证promtail豆荚正在运行。您应该看到只有两个,因为我们正在运行一个两节点集群。

kubectl准备- n监视吊舱的名字状况重启年龄promtail - 87 t62 1/1 0 35 s promtail-8c2r4运行1/1 0 35 s运行

你可以达到Grafana实例并开始探索你的日志。例如,如果你想看到所有的日志监控名称空间使用{名称空间=“监控”}。你也可以扩大单个日志行发现Kubernetes服务发现的所有可用的标签。

<“监控”名称空间中的日志>
<“监控”名称空间中的日志>

获取与systemd kubelet日志

到目前为止,我们已经从容器抓取日志,但是如果你想获得更多的可见性,你也可以刮systemd从每个机器的日志。这意味着你也可以获得kubelet日志。

我们编辑文件,我们的价值观extraScrapeConfigs添加systemd工作:

extraScrapeConfigs: job_name:期刊杂志:路径:/var/log/journal max_age: 12 h标签:工作:systemd-journal relabel_configs: - source_labels: [‘__journal__systemd_unit] target_label:“单位”——source_labels: [‘__journal__hostname] target_label:“主机名”

随时改变relabel_configs比赛你将在您自己的环境中使用。

现在我们需要添加一个卷用于访问systemd日志:

extraVolumes:名称:《hostPath:路径:/var/log/journal

并添加一个新的卷Promtail山:

extraVolumeMounts:名称:《mountPath: /var/log/journal只读的:真的

现在,我们准备好了,我们可以更新promtail部署:

执掌升级promtail洛基/ promtail - n - f values.yaml监控

让我们回到Grafana下面的查询和类型从Kubelet获取与体积相关的所有日志:

{单位= " kubelet。服务“}| =“体积”

过滤器表达式是强大的LogQL——他们帮你扫描日志。在这种情况下,它会过滤掉你所有的kubelet日志没有体积词。

工作流很简单:你总是选择一组标签匹配器。这种方式,你打算减少数据扫描(如应用程序,一个名称空间或甚至一个集群)。然后,您可以使用一组过滤器找到你想要的日志。

Promtail也支持syslog

添加Kubernetes事件

Kubernetes事件(kubectl得到事件- n监测)是一个伟大的方式来调试和排除kubernetes集群。事件包含的信息如节点重启,OOMKiller和Pod失败。

我们将部署eventrouter应用程序创建的Heptio这些事件的日志stdout。但首先,我们需要配置Promtail。我们想要解析名称空间添加一个标签的内容,为了快速访问事件的名称空间。

让我们更新pipelineStages解析日志的eventrouter:

pipelineStages:码头工人:匹配选择器:“{应用=“eventrouter”}”阶段:- json:表达式:名称空间:event.metadata.namespace -标签:名称空间:”“

管道阶段是伟大的方式来解析和创建标签(日志内容索引)。如果你想配置更多的检查文档

现在,再次更新Promtail:

执掌升级promtail洛基/ promtail - n - f values.yaml监控

和部署eventrouter使用:

kubectl创建https://raw.githubusercontent.com/grafana/loki/master/docs/clients/aws/eks/eventrouter.yaml serviceaccount - f / eventrouter clusterrole.rbac.authorization.k8s创建。io / eventrouter clusterrolebinding.rbac.authorization.k8s创建。io / eventrouter configmap创建/ eventrouter-cm创建部署。应用程序/ eventrouter创建

让我们进入Grafana探索为我们的新和查询事件监控名称空间使用{应用= " eventrouter”,名称空间=“监控”}。更多的信息eventrouter,一定要读这篇博客高。

结论

就是这样!你可以下载最后的和完整的values.yaml如果有必要的话)。

的集群现在已经准备好,所有当前和未来的应用程序日志将会运往Promtail洛基。你还可以去探索kubelet和Kubernetes事件。因为我们使用DaemonSet,你会自动抓取所有节点日志当你规模。

如果你想进一步推动这个,看看乔的博客如何自动创建Grafana仪表板与洛基,当你部署新Kubernetes应用程序注释。

如果你需要删除的集群运行loki-promtail eksctl删除集群——名称