31|日志:如何搭建轻量云原生业务日志系统?
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了如何搭建轻量云原生业务日志系统,并使用Grafana Loki构建可观测性的日志体系。作者详细讲解了在生产环境下日志查询的复杂性和挑战,以及如何安装Loki组件并通过Helm一次性安装所有组件。读者可以学习如何访问Grafana界面,部署示例应用以产生日志,并使用Loki进行日志查询,包括通过表单构造查询语句和通过关键字搜索日志。文章还提供了常用LogQL例子,帮助读者更好地使用Loki。此外,文章简要介绍了Loki的工作原理,包括核心组件Promtail和Loki。整体而言,本文通过实际操作和示例,帮助读者快速了解了搭建轻量云原生业务日志系统的方法和Loki的使用技巧。文章还提供了生产建议,包括配置持久化、使用合适的部署方式以及使用云厂商托管服务存储日志。这些建议有助于读者在实际应用中更好地使用Loki。
《云原生架构与 GitOps 实战》,新⼈⾸单¥59
全部留言(13)
- 最新
- 精选
- 争光 Alan针对elk,splunk,loki能谈一下优缺点吗?都适合什么场景
作者回复: 小规模场景用 Loki,大规模场景下 ELK 查询的性能比较好,但索引文件占用的空间会比较大。Splunk 采集数据比较快,但查询比较慢。Loki 相对来说性能比较均衡。
2023-03-14归属地:上海22 - Geek_28f561每天上T级别的日志,如果使用阿里云,Loki的存储用什么服务。开源的JuiceFS+阿里的OSS怎么样?
作者回复: 是一个不错的方案,OSS 可以实现接近无限存储的方案,JuiceFS 提供文件系统。不过需要注意两个问题,一个是存储卷的挂载问题,第二个是读取和写入速度的问题。
2023-02-21归属地:北京2 - 邵涵文中收集的pod的日志是pod中进程打印到标准输出的,如果pod中部署的应用是打印日志到日志文件中,要如何收集日志?或者,在将应用部署到k8s中时,是建议都将日志打印到标准输出?
作者回复: 一般建议把日志打印到标准输出中,如果是输出文件的话可能 EFK 技术栈更适合。
2023-04-01归属地:北京1 - 黑鹰配置持久化 和 日志持久化配置 这两个有什么区别呢? loki: persistence: enabled: true size: 500Gi 与 loki: config: schema_config: configs: - from: 2020-05-15 store: aws object_store: s3 schema: v11 index: prefix: loki_ storage_config: aws: s3: s3://access_key:secret_access_key@region/bucket_name dynamodb: dynamodb_url: dynamodb://access_key:secret_access_key@region
作者回复: 一种是通过 K8s 的 PVC 来提供持久化存储,一种是使用外部 S3 来存储镜像。生产环境推荐用外部存储系统。
2023-03-15归属地:北京21 - 又双叒叕是一年啊loki如果配置关键字告警,有对接的开源方案吗
作者回复: Grafana alert 应该就可以满足
2023-08-08归属地:北京 - Geek_d312b7请问: {app="log-example"} |= `` 查询显示的日志都是带反斜线(转义符号)是怎么回事?比如类似下面这样, { "log": "{\"duration\":2935,\"level\":\"info\",\"method\":\"GET\",\"msg\":\"request completed\",\"size\":4,\"status\":200,\"time\":\"2023-06-24T01:27:05Z\",\"uri\":\"/ping\"}\n", "stream": "stderr", "time": "2023-06-24T01:27:05.513473746Z" } 另外,code模式使用下面的查询语句,一条日志也都没有查询出来。 {app="log-example"} | logfmt | status = `200` {app="log-example"} | log | status = `200` 是什么原因?是不是跟上面 {app="log-example"} |= `` 查出来显示都带有转义符号有关?
作者回复: 因为实际应用输出了两种格式的日志,查询 json 的日志可以用 {app="log-example"} | json | status = `200` 查询 logfmt 格式的日志可以用 {app="log-example"} | logfmt | status = `200`
2023-06-24归属地:广东 - 黑鹰思考题1: sum by(status) ( rate({app="log-example"} |= `status=` | logfmt | status != 200 [1h]) ) 思考题2: topk(3, sum( rate({ app != "" } [10m]) ) by(app) )
作者回复: 👍🏻
2023-03-18归属地:北京 - 黑鹰{app="log-example"} | logfmt | status = `200` code模式使用上面的查询语句,一条日志也没有查询出来。 用 {app="log-example"} |= `status=` 这条语句,可以查询到很多 status=200的日志。 请问下是我哪里操作不对吗?
作者回复: 用 {app="log-example"} |= `status=` 这条语句能查到 logfmt 格式输出的日志吗?示例应用输出了 logfmt 和 json 两种格式的日志,也可以尝试用 {app="log-example"} | json | status = `200` 语句来查询。
2023-03-06归属地:北京2 - 旋风log-example镜像只支持arm?
作者回复: 感谢指正,已经同时上传了 amd64 版本了。
2023-02-18归属地:北京 - 林龍想问一下,项目中已经有了链路的功能,还需要日志吗? 链路记录了请求值,响应值,只能执行的sql,es、redis的语句等。
作者回复: 链路追踪主要用来查看服务的请求链路情况,日志主要用来排查服务输出的错误日志。
2023-02-18归属地:广东2