这里因为要让k8s集群外能访问到所以将ClusterIP 修改为NodePort类型,具体修改后内容如下
kubectl edit svc my-release-grafana -n loki
spec:
clusterIP: 10.100.87.199
externalTrafficPolicy: Cluster
ports:
- name: service
nodePort: 30060
port: 80
protocol: TCP
targetPort: 3000
修改好以后保存即可。
生效之后就可以在192.168.100.203:30060访问grafana了。
登录完成后,我们就可以添加 Loki 作为数据源了,从左侧面板,选择配置 -> 数据源:
在数据源视图中,点击添加数据源,然后选择 Loki。
给数据源起一个名字,然后设置一个 Grafana 实例可以访问的 Loki URL。我们这里由于 Loki 和 Grafana 都在相同的命名空间中运行,不需要使用任何验证方案,因此不需要其他配置,单击 “保存和测试”。您应该会看到一条确认消息 Data source connected and labels found.。
http://loki.loki.svc.cluster.local:3100/
现在 Grafana 已经连接到 Loki 了,接下来我们可以查询部署到 demo 命名空间的示例应用的日志,我们可以查找错误,通过 trace id 查找事务等等。
在 Grafana 页面中,从侧面板中选择 “探索”,选择上一步中添加的 Loki数据源,在查询框中,输入{namespace=”default”},然后点击 “运行查询”,正常我们就可以看到日志返回了。
此外我们还可以添加更多的过滤器和标签,来缩小我们想要查询的日志范围。要查看来自 default 命名空间的 shida-getaway 的日志,可以使用语句 {namespace=”default”,cOntainer=”shida-getaway”} 进行查询,我们也可以查找那些非正常的状态码的 http 请求 {namespace=”default”} |= “http.resp.status”!= “200”。
我们还可以对来自日志的数据进行一些聚合分析。比如这里面汇总过去5分钟内 default 命名空间的 http 状态码,查询语句为:sum(count_over_time({namespace=”default”} |= “http.resp.status” | json [5m])) by (http_resp_status)
上面的绿线代表 302 状态码,黄线代表 200 状态码,过去5分钟内没有其他状态码。关于 Loki 的查询语言 LogQL 还有很多高级的操作,我们可以通过官方文档查看更多。
此外查询历史记录还会被保存下来,这样我们就可以在将来重新访问一个查询历史了,查询检查器还可以报告有关查询执行的指标。
编写日志流选择器后,您可以通过编写搜索表达式来进一步过滤结果。搜索表达式可以只是文本或正则表达式。
查询示例:
{job="mysql"} |= "error"
{name="kafka"} |~ "tsdb-ops.*io:2003"
{instance=~"kafka-[23]",name="kafka"} != kafka.server:type=ReplicaManager
过滤器运算符可以被链接,并将顺序过滤表达式-结果日志行将满足每个过滤器。例如:
{job="mysql"} |= "error" != "timeout"
已实现以下过滤器类型:
参考资料:https://blog.csdn.net/weixin_39765280/article/details/111248445