暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

kubernetes与Grafana Loki集成

云原生CTO 2020-11-10
609

Loki是受Prometheus启发的水平可扩展,高度可用的多租户日志聚合系统。它的设计具有很高的成本效益,并且易于操作。它不索引日志的内容,而是为每个日志流设置一组标签。

Loki项目于2018年在Grafana Labs启动,并在KubeCon Seattle宣布。Loki是根据Apache 2.0许可发行的。

Loki围绕日志聚合做出了一些有趣的选择,以支持水平扩展并保持较低的运营成本。它的灵感来自prometheus。Loki支持查询日志中的错误,模式等。

在本文中,我们将介绍Kubernetes上Loki的设置。在设置Loki之前,我们将安装一些微服务,可用于生成日志和事件,然后通过Loki使用它们。我们将使用FluentBit将日志转发到Loki,然后在Grafana上使用Loki数据源来分析日志。

1 设置示例应用程序

我们将在本地Kubernetes集群(确切地说是docker-desktop)上使用启用Istio的名称空间来安装microservices-demo应用程序。Istio设置完成后,让我们创建新的名称空间

$ kubectl create ns demo
$ kubectl label namespace demo istio-injection=enabled #Enable istio sidecar injection


接下来,让我们安装microservices-demo应用程序。

克隆要部署的所有微服务的仓库

$ git clone git@github.com:GoogleCloudPlatform/microservices-demo.git
cd microservices-demo
# Install the services
$ kubectl apply -n demo  -f ./release/kubernetes-manifests.yaml
# Setup istio gateway and virtual services for routing
$ kubectl apply -n demo  -f ./release/istio-manifests.yaml

安装完成后,请使用来快速验证正在运行的Pod kubectl -n demo get pods。现在可以在你的环境的Istio网关端点上访问该演示应用程序。

微服务演示应用程序是在线精品店,支持用不同编程语言编写的多项服务。该应用程序可用于将商品添加到购物车,更改交易币种并执行结帐。所有这些动作都由不同的服务提供动力。

2 安装Loki和FluentBit

在示例应用程序启动并运行之后,让我们开始安装Loki。

$ helm repo add loki https://grafana.github.io/loki/charts
$ helm repo update

上面的步骤Loki helm 添加到repo,现在可以安装了。

$ kubectl create ns loki

$ helm upgrade --install loki --namespace=loki loki/loki  --set fluent-bit.enabled=true,promtail.enabled=false,grafana.enabled=true,prometheus.enabled=true,prometheus.alertmanager.persistentVolume.enabled=true,prometheus.server.persistentVolume.enabled=true

确保将fluent-bit.enabled=true其设置为使用FluentBit作为日志转发器。接下来,安装FluentBit

$ helm upgrade --install fluent-bit --namespace=loki loki/fluent-bit --set loki.serviceName=loki.loki.svc.cluster.local

使用来检查loki名称空间中正在运行的Pod kubectl -n loki get pods。你可能会看到loki pod因错误而崩溃

level=error caller=out_loki.go:49 [flb-go="failed to launch" error="failed to parse BatchSize: 1.048576e+06"

这是一个已知问题,在Loki的FluentBit配置图上转义了值。解决方法非常简单

$ kubectl -n loki edit cm/fluent-bit-fluent-bit-loki
#在配置的[Output]部分下,将BatchSize的值替换为1048576。保存配置

此时,你应该看到loki名称空间中的所有服务和Pod都正常工作。为确保一切正常,我们将安装Grafana以使用Loki进行一些查询。

3 安装Grafana

让我们拉取Grafana helm

$ helm repo add grafana https://grafana.github.io/helm-charts
$ helm repo update

我们将使用现有的名称空间来安装Grafana,尽管这不是必需的。

$ helm upgrade --install grafana --namespace=loki grafana/grafana

你可以kubectl -n loki get pods用来验证所有Pod是否都按预期运行。

在安装Loki,FluentBit和Grafana之后检查Pod是否运行良好。

4 将Loki添加到Grafana

要访问Grafana仪表板,请转发至Grafana服务并http://localhost:8080在浏览器中打开URL 。

$ kubectl -n loki port-forward svc/grafana 8080:80
# 在浏览器中导航到http:// localhost:8080

系统将提示你输入用户名和密码。使用用户名admin并按照以下步骤获取密码

$ kubectl get secret --namespace loki grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo
# 管理员用户的密码

登录后,我们可以将Loki添加为数据源。在左侧面板中,选择配置->数据源

               选择配置下的数据源

在“数据源”视图中,单击“添加数据源”,然后选择“ Loki”

                 选择Loki数据源

给数据源命名,然后设置Loki URL。Grafana实例应该能够访问Loki URL。在我们的例子中,由于Loki和Grafana都在相同的名称空间中运行,并且不需要使用任何身份验证方案,因此不需要其他配置。点击“保存并测试”。你应该看到一条确认消息,例如“已连接数据源和找到标签。”

               配置Loki数据源

5 与Loki的查询

现在Grafana已连接到Loki,我们可以从部署在demo名称空间中的示例应用程序中查询日志,以观察其行为。我们可以寻找错误,通过跟踪ID查找事务,并做许多更强大的事情,包括可视化模式和趋势。Loki的查询语言称为LogQL。在Grafana应用程序中,从侧面板中选择“浏览”。选择上一步中添加的Loki数据源。在查询框中,添加{namespace="demo"}并点击“运行查询”。你可以看到正在返回的日志

        在Grafana中使用Loki的基本LogQL查询

你可以添加更多过滤器和标签来缩小想要查看的日志的范围。例如:要查看来自演示名称空间中Istio-sidecars的日志,请使用查询{container="istio-proxy", namespace="demo"}。我们还可以查找未以所需状态代码结尾的http请求{namespace="demo"} |= "http.resp.status"!= "200"`

               查询特定的容器

我们还可以对日志中的数据随时间进行一些汇总

  最近5分钟内,在演示名称空间中聚集http状态代码。
上方的绿线代表302状态代码,黄色代表200状态代码。
最近5分钟内没有其他状态代码。

你可以进行一些高级操作,参考官方更多配置https://grafana.com/docs/loki/latest/logql/

你的查询历史记录已保存,你以后就可以根据需要重新访问查询。查询检查器报告有关查询执行的指标。要生成带有点差的一些日志,你可以使用示例应用程序执行一些操作,例如添加到卡和结帐。

共勉

读书而不思考,等于吃饭而不消化。——波尔克


文章转载自云原生CTO,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论