文章目录
- 1. PLG是什么
- 2. 搭建步骤
- 创建一个Grafana Cloud账号
- 部署Promtail在本地k8s上,进行收集logs。
- 解析
- 3. Grafana展示数据
- 4.总结
1. PLG是什么
PLG=Promtail+Loki+Grafana
Promtail: 代理,负责收集日志并将其发送给 loki
Loki: 日志记录引擎,负责存储日志和处理查询
Grafana: UI 界面
Loki 和常用的 EFK(Elasticsearch + Filebeat + Kibana)日志采集方案类似,基本架构都是在应用节点有代理进程(Promtail)收集日志,传输到集中化的服务(Loki)存储和索引,最后通过图形化界面(Grafana)统一查询。
2. 搭建步骤
创建一个Grafana Cloud账号
- 创建一个免费的账号需要用到Google,Github等平台的信息
- 创建完成后的,页面应该是如下图所示:
- 可以看到,我们有Grafana的实例,有Prometheus实例,有Loki实例在远程服务器上面了。我们就可以在本地k8s集群部署Promtail代理进行日志收集,并且转发到远程Loki实例上面了。
部署Promtail在本地k8s上,进行收集logs。
- 点击上面图中的Grafana的Launch按钮,然后进入到一个网页,依次点击Custom data–>Hosted logs–>xxx from a k8s cluster–>创建一个token即可;最后复制curl命令到本地集群执行。如下图:
- 我在本地有一个Ubuntu的k8s集群。
curl -fsS https://raw.githubusercontent.com/grafana/loki/master/tools/promtail.sh | sh -s 7xxxx4 glc_eyJvIjoiOTc3NDY0IiwibiI6InN0YWNrLTc3NjA4OC1pbnRlZ3JhdGlvbi1sb2tpLWNsb3VkIiwiayI6Ing4NzdSemo3Z1o4NGQxbnowMmdkVGc5UiIsIm0iOnsiciI6InByb2QtYXAtc291dGhlYXN0LTdisdX0= logs-prod-020.grafana.net default | kubectl apply --namespace=default -f -
执行过后,就会有资源,由于我是第二次使用这条curl命令了,因此你可以看到有些资源我是unchanged的。另外kubectl get pods可以看到创建在namespace=default中的名字为promtail-xxx的pod。
young@young-hp:~$ curl -fsS https://raw.githubusercontent.com/grafana/loki/master/tools/promtail.sh | sh -s 7xxxx4 glc_eyJvIjoiOTc3NDY0IiwibiI6InN0YWNrLTc3NjA4OC1pbnRlZ3JhdGlvbi1sb2tpLWNsb3VkIiwiayI6Ing4NzdSemo3Z1o4NGQxbnowMmdkVGc5UiIsIm0iOnsiciI6InByb2QtYXAtc291dGhlYXN0LTdisdX0= logs-prod-020.grafana.net default | kubectl apply --namespace=default -f -
configmap/promtail unchanged
daemonset.apps/promtail configured
serviceaccount/promtail unchanged
clusterrole.rbac.authorization.k8s.io/promtail unchanged
clusterrolebinding.rbac.authorization.k8s.io/promtail unchanged
young@young-hp:~$ kubectl get pods
NAME READY STATUS RESTARTS AGE
hostpath-csi-k8s-io-0 9/9 Running 0 16d
6548ae1c1d40f288180fda2b-76876cc7c8-844p9 1/1 Running 0 47h
promtail-57t8d 1/1 Running 0 13m
promtail-9k4zz 1/1 Running 0 13m
解析
- Promtail其实是以Daemonset的形式部署在k8s集群上面的
- promtail-configmap.yaml文件就是在上面的那个curl命令后面的那个链接里面,里面主要是记录了像Prometheus那样的抓取log的规则。
- 例如下面的配置
scrape_configs:
- job_name: kubernetes-pods
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_collect] #这里的relabel_configs 部分将过滤具有 collect=true 标签的 Pod
regex: true
action: keep
这里详细可以参考下,https://grafana.com/docs/loki/latest/send-data/promtail/scraping/,这里面讲述了每一项都是什么意思。
3. Grafana展示数据
上面那个图上,Launch–>Connecting Data。然后点击左上方的,Data Sources,select grafanacloud-yourAccountName-logs 那个。
就来到如下图所示,点击Test蓝色按钮。
点击Explore view之后,展示如下,再次点击,这个箭头,就会出现下拉框。
后面的那个select label也是一样的,下面是我的一个LokiQL,点击第二步那里,可以选择code模式,即可以输入LokiQL。然后右上方Run Query
{namespace="default", container_name="promtail"} |= `Successfully`
4.总结
- 本文总结了如何利用Grafana Cloud搭建一个轻量级收集日志的系统,并且教你如何查询显示log。
- 参考:Promtail的抓取配置
- 另外还有Loki的Rotation,即免费的Grafana账号提供了50GB的内存存储,如果你的应用logs超过了这个数量,你想怎么处理?一般都是删除离现在最久远的log。将在另外一篇讲。