当前位置:   article > 正文

Loki 学习总结(1)—— Loki 中小项目日志系统的不二之选_loki chunk_target_size

loki chunk_target_size

前言

项目做正规了,日志系统是少不了的,目前大部分日志平台推荐基于 ELK 构建,不过 ELK 算是比较重了,架构太大,中小项目不太好 Hold 住,希望找一款简单一些的,如果实在找不到再上 ELK,这个时候一款名叫 Loki 的日志系统横空出世。Loki 是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统。它的设计非常经济高效且易于操作,因为它不会为日志内容编制索引,而是为每个日志流编制一组标签。项目受 Prometheus 启发,官方的介绍就是:Like Prometheus, but for logs,类似于 Prometheus 的日志系统。

Loki日志体系

一、Loki 快速上手

Loki 作为日志系统的后起之秀,设计上可以说非常优秀,设计的理念就是为了让日志聚合更简单,它被设计为非常经济高效且易于操作。它不索引日志的内容,而是为每个日志流设置一组标签。它主要由三部分组成:

  • Promtail 是日志收集器,负责收集应用的日志并发送给 Loki

  • Loki 用于日志的存储和解析,并提供查询 API 给下游展示。

  • Grafana 负责将 Loki 的日志可视化。

Loki 流程图

与其他日志聚合系统相比,Loki具有下面的一些特性:

  • 不对日志进行全文索引。通过存储压缩非结构化日志和仅索引元数据,Loki 操作起来会更简单,更省成本。
  • 通过使用与 Prometheus 相同的标签记录流对日志进行索引和分组,这使得日志的扩展和操作效率更高。
  • 特别适合储存 Kubernetes Pod 日志; 诸如 Pod 标签之类的元数据会被自动删除和编入索引。

简单上手

Loki 安装

首先是安装,现在跑 demo 我优先选择快捷方便的 Docker。下面是我修改过的 Docker Compose 脚本,根据自己的需要改改就能一键启动 Loki。

  1. version: "3"
  2. networks:
  3.   loki:
  4. services:
  5.   loki:
  6.     image: grafana/loki:2.2.1
  7.     container_name: loki-service
  8.     volumes:
  9. #    将loki的配置文件挂载到本地 c:/docker/loki 目录
  10.       - c:/docker/loki:/etc/loki/
  11.     ports:
  12.       - "3100:3100"
  13.     command: -config.file=/etc/loki/loki.yml
  14.     networks:
  15.       - loki
  16.   promtail:
  17.     image: grafana/promtail:2.2.1
  18.     container_name: promtail-service
  19.     volumes:  
  20.     #  为了读取本地的日志目录,这个是个默认配置目的就是为跑起来,生产肯定不是这样的。   
  21.       - c:/docker/log:/var/log/
  22.     #  promtail  的配置文件也挂载到本地 c:/docker/promtail目录  
  23.       - c:/docker/promtail:/etc/promtail/
  24.     command: -config.file=/etc/promtail/promtail.yml
  25.     networks:
  26.       - loki
  27.   grafana:
  28.     image: grafana/grafana:latest
  29.     container_name: grafana-service
  30.     ports:
  31.       - "3000:3000"
  32.     networks:
  33.       - loki

上面的挂载目录 c:/docker/loki 和 c:/docker/promtail 可以根据自己的情况修改。

Loki 配置

上面文件中的 -config.file=/etc/loki/loki.yml 是 Loki 的配置文件,我们需要将配置文件 loki.yml 提前放在 c:/docker/loki 下,我使用默认配置:

  1. auth_enabled: false
  2. server:
  3.   http_listen_port: 3100
  4. ingester:
  5.   lifecycler:
  6.     address: 127.0.0.1
  7.     ring:
  8.       kvstore:
  9.         store: inmemory
  10.       replication_factor: 1
  11.     final_sleep: 0s
  12.   chunk_idle_period: 1h       # Any chunk not receiving new logs in this time will be flushed
  13.   max_chunk_age: 1h           # All chunks will be flushed when they hit this age, default is 1h
  14.   chunk_target_size: 1048576  # Loki will attempt to build chunks up to 1.5MB, flushing first if chunk_idle_period or max_chunk_age is reached first
  15.   chunk_retain_period: 30s    # Must be greater than index read cache TTL if using an index cache (Default index read cache TTL is 5m)
  16.   max_transfer_retries: 0     # Chunk transfers disabled
  17. schema_config:
  18.   configs:
  19.     - from: 2020-10-24
  20.       store: boltdb-shipper
  21.       object_store: filesystem
  22.       schema: v11
  23.       index:
  24.         prefix: index_
  25.         period: 24h
  26. storage_config:
  27.   boltdb_shipper:
  28.     active_index_directory: /loki/boltdb-shipper-active
  29.     cache_location: /loki/boltdb-shipper-cache
  30.     cache_ttl: 24h         # Can be increased for faster performance over longer query periods, uses more disk space
  31.     shared_store: filesystem
  32.   filesystem:
  33.     directory: /loki/chunks
  34. compactor:
  35.   working_directory: /loki/boltdb-shipper-compactor
  36.   shared_store: filesystem
  37. limits_config:
  38.   reject_old_samples: true
  39.   reject_old_samples_max_age: 168h
  40. chunk_store_config:
  41.   max_look_back_period: 0s
  42. table_manager:
  43.   retention_deletes_enabled: false
  44.   retention_period: 0s
  45. ruler:
  46.   storage:
  47.     typelocal
  48.     local:
  49.       directory: /loki/rules
  50.   rule_path: /loki/rules-temp
  51.   alertmanager_url: http://localhost:9093
  52.   ring:
  53.     kvstore:
  54.       store: inmemory
  55.   enable_api: true

Promtail 的配置

和 Loki 类似,Promtail 也要在本地挂载的 c:/docker/promtail目录下配置 promtail.yml,这里也使用默认配置:

  1. server:
  2.   http_listen_port: 9080
  3.   grpc_listen_port: 0
  4. positions:
  5.   filename: /tmp/positions.yaml
  6. clients:
  7.   - url: http://loki:3100/loki/api/v1/push
  8. scrape_configs:
  9.   - job_name: system
  10.     static_configs:
  11.       - targets:
  12.           - localhost
  13.         labels:
  14.           job: varlogs
  15.           # 这个跟挂载的位置有点关系,你可以猜猜
  16.           __path__: /var/log/*log

我猜测 /var/log/*log 就是读取日志的位置,所以我把它挂载到本地 c:/docker/log,等下弄点日志到本地这个目录下,看看能读取出来不。

启动 Loki

配置完毕后执行 docker-compose -f <docker-compose.yml 路径> up 命令,会先下载镜像然后启动三个 Docker 容器。成功后打开 http://localhost:3000/ 登录 Grafana,默认账号密码是 admin/admin。然后在侧边栏添加数据源为 Loki。 

 然后点击 Log labels 就可以把当前系统采集的日志标签给显示出来,可以根据这些标签进行日志的过滤查询

然后配置 Loki 的 URL 为 http://loki:3100,然后点确定和测试,有绿色提示就表示成功了。

 我们使用的是 Docker Compose,因此 hostname 是服务名称 loki。然后点击侧边栏一个指南针形状的图标 Explore,就进入日志的 UI 了,这时候啥也没有。

 得造点日志,搞一个 Spring Boot 应用,然后在 application.yml 中配置日志选项,然后启动应用生成一些日志。

  1. logging:
  2.   file:
  3.   # 弄到疑似Promtail的日志读取路径试试
  4.     path: c:/docker/log
  5.   level:
  6.     org: debug

然后我输入了一个从文档中找到的查询日志的表达式(Loki query){filename="/var/log/spring.log"}, 文件名称去 c:/docker/log 下看是否有日志。

Loki 中查询展示 Spring Boot 日志

Promtail 日志代理

目前 Promtail 可以从两个来源跟踪日志:本地日志文件和 systemd 日志,我们上面演示的就是本地日志文件的加载,这种方式是目前我唯一能够使用的途径,另一种途径是通过 K8S 的服务发现能力。

Loki 流程图

如果在多个应用服务器上部署对应的多个 Promtail 守护程序就能监视多个应用的静态日志文件,并通过 Loki API 将日志推送到 Loki 中进行聚合式的管理。

Spring Boot 日志的部署拓扑

Promtail动态配置

我们只需要为 Loki 应用部署相关的 Promtail 守护程序即可。这里我仍然使用 Docker 对 Promtail 进行部署,不过我不能再使用默认配置了,这时的​​ config.yml​​ 应该是:

  1. server:
  2.   http_listen_port: 9080
  3.   grpc_listen_port: 0
  4. positions:
  5.   filename: /var/log/positions.yaml
  6. client:
  7.   url: http://${LOKI_HOST}:${LOKI_PORT}/loki/api/v1/push
  8. scrape_configs:
  9.   - job_name: system
  10.     pipeline_stages:
  11.     static_configs:
  12.       - labels:
  13.           app: ${APP_NAME}
  14.           job: varlogs
  15.           host: ${LOG_HOST}
  16.           __path__: /var/log/*log

为了构建一个通用的配置,我将一些参数进行了动态化。这是 ​​Loki2.1+​​​ 版本提供的特性,可以使用​​ ${} 来引用环境变量,甚至你可以为其指定默认值​​ ${VAR:default_value}​​。但是你必须得知道为了开启这一特性需要在 Promtail 启动命令中添加选项​​ -config.expand-env​​。

Promtail Docker 镜像改造

根据这个我对 Promtail 的 Docker 镜像进行了改造,具体的 ​​Dockerfile​​ 为:

  1. FROM grafana/promtail:2.2.1
  2. LABEL AUTHOR = felord.cn
  3. VOLUME ["/var/log/"]
  4. EXPOSE 9080
  5. ENV LOKI_HOST="localhost"
  6. ENV LOKI_PORT=3100
  7. ENV APP_NAME="APP"
  8. ENV LOG_HOST="localhost"
  9. COPY config.yml /etc/promtail/
  10. CMD ["-config.file=/etc/promtail/config.yml", "-config.expand-env"]

你可以通过​​ docker build -t loki-promtail:1.0 .​​命令构建这个自定义 Promtail 镜像。基本的启动命令:

docker run -d  --name promtail-service --network loki -v c:/docker/log:/var/log/  -e LOKI_HOST=loki -e APP_NAME=SpringBoot  loki-promtail:1.0

其中挂载的目录​​ c:/docker/log​​​ 依然是应用的日志目录,​​LOKI_HOST ​​要保证能够同 Loki 服务器通信,无论你通过直连还是 Docker 网络(这里用了 Docker 网桥)。你可以可以使用 Docker Compose 将应用和 Promtail 进行捆绑,所有的 Promtail 将把对应的日志发往 Loki 进行集中式的管理。另外通过自定义的 ​​Label​​ 我们可以通过应用名称来搜索日志了。

二、Loki 语法

选择器

对于查询表达式的标签部分,将其包装在花括号中 {},然后使用键值对的语法来选择标签,多个标签表达式用逗号分隔,比如:

|=:日志行包含字符串
!=:日志行不包含字符串
|~:日志行匹配正则表达式
!~:日志行与正则表达式不匹配

  1. 1 # 精确匹配:|="2020-11-16 "
  2. 2 {app_kubernetes_io_instance="admin-service-test2-container-provider"}|="2020-11-16 "
  3. 1 # 模糊匹配:|~"2020-11-16 "
  4. 2 {app_kubernetes_io_instance="admin-service-test2-container-provider"}|~"2020-11-16 "
  5. 1 # 排除过滤:!=/!~ "数据中心"
  6. 2 {app_kubernetes_io_instance="admin-service-master-container-provider"}!="数据中心"
  7. 3 {app_kubernetes_io_instance="admin-service-master-container-provider"}!~"数据中心"
  8. 1 # 正则匹配: |~ "()"
  9. 2 {app_kubernetes_io_instance="admin-service-master-container-provider"}!~"(admin|web)"
  10. 3 {app_kubernetes_io_instance="admin-service-master-container-provider"}|~"ERROR|error"

三、Loki 错误日志查看

先通过表达式查询出有错误的日志

再根据上下文查看异常堆栈信息

异常信息如下

 如果行数不够,可以点击 Load 10 more,点击一次将会增加10行,左边将会显示 Found 20 rows,历史查询使用,选择历史查询记录,查询,默认保留7天查询记录

 分屏功能使用,根据不同标签选择器查询不同的日志 

根据标签选择器,自动刷新日志

四、范围查询

  • rate:计算每秒的条目数
  • count_over_time:计算给定范围内每个日志流的条目
  1. 1 # 三十分钟日志行记录
  2. 2 count_over_time({app_kubernetes_io_instance="admin-service-master-container-web"}[30m]) 
  3. 3
  4. 4 # 12h小时内出现错误的速率
  5. 5 rate({app_kubernetes_io_instance=~".*master-container.*"} |~ "ERROR|error" [12h])

五、集合运算

与vPromQL 一样,LogQL 支持内置聚合运算符的一个子集,可用于聚合单个向量的元素,从而产生具有更少元素但具有集合值的新向量:

  • sum:计算标签上的总和
  • min:选择最少的标签
  • max:选择标签上方的最大值
  • avg:计算标签上的平均值
  • stddev:计算标签上的总体标准差
  • stdvar:计算标签上的总体标准方差
  • count:计算向量中元素的数量
  • bottomk:通过样本值选择最小的k个元素
  • topk:通过样本值选择最大的k个元素
  1. # 统计1个小时日志量最大的前10个服务 
  2. topk(10,sum(rate({app_kubernetes_io_instance=~".*master-container.*"}[60m])) by(container))
  3. # 统计最近6小时内错误日志计数
  4. sum(count_over_time({app_kubernetes_io_instance=~".*master-container.*"}|~"ERROR"[6h])) by (container)

六、Loki Url 表达式

URL 如下:

 https://grafana-liwenliang.com/explore?orgId=1&left=%5B%22now-1h%22,%22now%22,%22Loki%22,%7B%22expr%22:%22%7Bapp_kubernetes_io_instance%3D~%5C%22user-service-test2-container-provider%5C%22%7D%7C~%5C%222020-11-05%5C%22%7C~%5C%22ERROR%5C%22%7C~%5C%22.com.test.scrm.%5C%22%22,%22maxLines%22:5000%7D%5D

分析:

  • %7C 表示|
  • %5C%22 表示"
  • 时间:now-1h 可替换 now-1min或者 now-5min
  • 项目名称:user-service-test2-container-provider 可替换为 .test2-container. 或者 event-service-test2-container-provider
  • 查询日志:2020-11-05 可替换为 2020-11-04
  • 删除一个管道 %7C%5C%22ERROR%5C%22%7C%5C%22.com.dadi01.scrm.%5C%22 这一段删除
  • 最后生成的链接粘贴到浏览器访问

URL 加解密:

上述可通过 url 加解密生成最终查询 url 链接,进入指定网站中:https://www.sojson.com/encodeurl.html

 上例中解密如下:

 https://grafana-liwenliang.com/explore?orgId=1&left=["now-1h","now","Loki",{"expr":"{app_kubernetes_io_instance%3D~\"user-service-test2-container-provider\"}|~\"2020-11-05\"|~\"ERROR\"|~\".com.test.scrm.\"","maxLines":5000}]

根据自定义查询语句:

  1. # 根据日期查询
  2. https://grafana-liwenliang.com/explore?orgId=1&left=["now-1h","now","Loki",{"expr":"{app_kubernetes_io_instance=~\"user-service-test2-container-provider\\"}|~\"2020-11-18\\"","maxLines":5000}]
  3. # 加密
  4. https://grafana-liwenliang.com/explore?orgId=1&left=%5B%22now-1h%22,%22now%22,%22Loki%22,%7B%22expr%22:%22%7Bapp_kubernetes_io_instance=~%5C%22user-service-test2-container-provider%5C%22%7D%7C~%5C%222020-11-18%5C%22%22,%22maxLines%22:5000%7D%5D
  5. # 根据服务名称查询
  6. https://grafana-liwenliang.com/explore?orgId=1&left=["now-1h","now","Loki",{"expr":"{app_kubernetes_io_instance=~\"data-service-test2-container-provider\\"}|~\"2020-11-18\\"","maxLines":5000}]
  7. # 加密
  8. https://grafana-liwenliang.com/explore?orgId=1&left=%5B%22now-1h%22,%22now%22,%22Loki%22,%7B%22expr%22:%22%7Bapp_kubernetes_io_instance=~%5C%22data-service-test2-container-provider%5C%22%7D%7C~%5C%222020-11-18%5C%22%22,%22maxLines%22:5000%7D%5D
  9. # 根据对应的数据库查询
  10. https://grafana-liwenliang.com/explore?orgId=1&left=["now-1h","now","Loki",{"expr":"{app_kubernetes_io_instance=~\"data-service-test2-container-provider\\"}|~\"2020-11-18\\"|~\"databaseName:scrm_test\\"","maxLines":5000}]
  11. ## 加密
  12. https://grafana-liwenliang.com/explore?orgId=1&left=%5B%22now-1h%22,%22now%22,%22Loki%22,%7B%22expr%22:%22%7Bapp_kubernetes_io_instance=~%5C%22data-service-test2-container-provider%5C%22%7D%7C~%5C%222020-11-18%5C%22%7C~%5C%22databaseName:scrm_test%5C%22%22,%22maxLines%22:5000%7D%5D

加密好的url直接粘贴到浏览器中即可查询

七、Loki api 

  1. # 查询标签
  2. curl -G -s "http://localhost:3100/loki/api/v1/labels" | jq
  3. curl -G -s  "http://localhost:3100/loki/api/v1/labels" | jq .data[]
  4. "__name__"
  5. "app"
  6. "app_kubernetes_io_component"
  7. "app_kubernetes_io_instance"
  8. "app_kubernetes_io_managed_by"
  9. "app_kubernetes_io_name"
  10. "app_kubernetes_io_version"
  11. "chart"
  12. "component"
  13. "container"
  14. "controller_revision_hash"
  15. "filename"
  16. "helm_sh_chart"
  17. "heritage"
  18. "job"
  19. "k8s_app"
  20. "name"
  21. "namespace"
  22. "pod"
  23. "pod_template_generation"
  24. "pod_template_hash"
  25. "release"
  26. "releaseRevision"
  27. "statefulset_kubernetes_io_pod_name"
  28. "stream"
  29. "task"
  30. # 根据标签查询对应标签值
  31. curl -G -s http://localhost:3100/loki/api/v1/label/<name>/values | jq
  32. curl -G -s  "http://localhost:3100/loki/api/v1/label/app_kubernetes_io_instance/values" | jq .data[]
  33. "admin-service-test2-container-provider"
  34. "admin-service-test2-container-web"
  35. "admin-service-uat-container-provider"
  36. "admin-service-uat-container-web"
  37. "data-service-test2-container-provider"
  38. "data-service-uat-container-provider"
  39. "domain-service-test2-container-provider"
  40. "domain-service-uat-container-provider"
  41. "equity-service-test2-container-provider"
  42. "equity-service-uat-container-provider"
  43. "event-service-test2-container-provider"
  44. "event-service-uat-container-provider"
  45. "gateway-service-test2-container-soul-bootstrap"
  46. "gateway-service-uat-container-soul-bootstrap"
  47. "job-admin-service-test2-container-executor"
  48. "job-admin-service-test2-container-web"
  49. "job-admin-service-uat-container-executor"
  50. "job-admin-service-uat-container-web"
  51. "kubernetes-dashboard"
  52. # 根据标签查询对应的日志
  53. curl -G -s http://localhost:3100/loki/api/v1/query_range | jq
  54. curl -G -s  "http://localhost:3100/loki/api/v1/query_range" --data-urlencode 'query={app_kubernetes_io_instance=~".*test2-container.*"}|~"ERROR|error"' | jq .data.result | jq .[].values[0][1]
  55. "2020-11-18 18:08:17.149 DEBUG org.apache.coyote.http11.Http11NioProtocol - Processing socket [org.apache.tomcat.util.net.NioChannel@3bf51e7e:java.nio.channels.SocketChannel[connected local=admin-service-test2-container-web-686d7c459d-fzc7d/ remote=/]] with status [ERROR]\n"
  56. "2020-11-18 18:10:18.876 DEBUG io.lettuce.core.protocol.RedisStateMachine - Decoded LatencyMeteredCommand [type=GET, output=ValueOutput [output=[B@cd9fe9e, error='null'], commandType=io.lettuce.core.protocol.AsyncCommand], empty stack: true\n"
  57. "2020-11-18 18:07:03.967 DEBUG org.springframework.jdbc.datasource.DataSourceTransactionManager - Creating new transaction with n

查询日志流

查询某个时间点日志:GET /loki/api/v1/query,示例:

http://192.168.15.139:30100/loki/api/v1/query?direction=BACKWARD&limit=1000&query=sum(rate({job="anychatlog"}[2d]))

参数说明:

  • query:要执行的LogQL查询
  • limit: 要返回的最大条目数
  • time: 查询的评估时间作为一个纳秒的 Unix 纪元。默认为现在。
  • direction:确定日志的排序顺序。支持的值为forward或backward。默认为backward

查询某个时间段日志:GET /loki/api/v1/query_range,示例:

http://192.168.15.139:30100/loki/api/v1/query_range?direction=BACKWARD&limit=1000&query={job="anychatlog"} &start=1641280408415000000&end=1641453208415000000&step=120

参数说明:

  • query:要执行的LogQL查询
  • limit: 要返回的最大条目数
  • start: 查询的开始时间,以纳秒 Unix 纪元表示。默认为一小时前。
  • end: 查询的结束时间,以纳秒 Unix 纪元表示。默认为现在。
  • step: 以duration格式或浮点秒数查询分辨率步长。duration指形式为 的 Prometheus 持续时间字符串[0-9]+[smhdwy]。例如,5m 表示持续时间为 5 分钟。默认为基于start和的动态值end。仅适用于产生矩阵响应的查询类型。
  • interval:这个参数是实验性的;请参阅步骤与间隔下的说明。只返回(或大于)指定间隔的条目,可以是duration格式或浮点数。仅适用于产生流响应的查询。
  • direction:确定日志的排序顺序。支持的值为forward或backward。默认为backward.

查询标签

查询标签列表:GET /loki/api/v1/labels

参数:

  • start: 查询的开始时间,以纳秒 Unix 纪元表示。默认为 6 小时前。
  • end: 查询的结束时间,以纳秒 Unix 纪元表示。默认为现在。

示例: http://192.168.15.139:30100/loki/api/v1/labels

查询标签值:查询给定时间跨度内给定标签的已知值列表 GET /api/prom/label/<name>/values

参数:

  • name: GET /loki/api/v1/label中的标签
  • start: 查询的开始时间,以纳秒 Unix 纪元表示。默认为 6 小时前。
  • end: 查询的结束时间,以纳秒 Unix 纪元表示。默认为现在。

示例:http://192.168.15.139:30100/loki/api/v1/label/job/values

匹配特定标签集列表

返回匹配特定标签集的时间序列列表:GET /loki/api/v1/series;POST /loki/api/v1/series

参数:

  • match[]=<series_selector>:选择要返回的日志流的标签。match[]必须至少提供一个参数。
  • start=: 开始时间戳。
  • end=: 结束时间戳。

示例:http://192.168.15.139:30100/loki/api/v1/series?start=1640922291907000000&end=1641527091908000000&match[]={host="192.168.11.123"}

删除日志流

说明:需要2.3.0以上版本的Loki,并按官方文档进行配置

删除日志流:POST loki_addr/loki/api/admin/delete?match[]

参数:

  • match[]:标签匹配器,用于标识要从中删除的流,必须至少提供一个参数
  • <series_selector>:查询参数
  • start:开始的时间戳
  • end:结束的时间戳
  • 204 响应表示成功。

示例:http://192.168.15.139:30100/loki/api/admin/delete?match[]={job="anychatlog"}

列出删除请求:GET /loki/api/admin/delete

示例:http://192.168.15.139:30100/loki/api/admin/delete

取消删除请求:POST /loki/api/admin/cancel_delete_request

示例:http://192.168.15.139:30100/loki/api/admin/cancel_delete_request?request_id=dad569a8

其它常用API

GET /ready:当 Loki 摄取器准备好接受流量时,返回 HTTP 200。如果在 Kubernetes 上运行 Loki/ready可以用作就绪探针。

POST /flush:将摄取器持有的所有内存块刷新到后备存储。主要用于本地测试。

POST /ingester/flush_shutdown:摄取器的关闭,特别是将始终刷新它持有的任何内存块。这有助于缩小启用 WAL 的摄取器,我们希望确保旧的 WAL 目录不是孤立的,而是刷新到我们的块后端。

GET /metrics:公开 Prometheus 指标。有关 导出的指标列表,请参阅 loki

GET /config:/config公开当前配置。可选的mode查询参数可用于修改输出。如果它具有该值,则diff仅返回默认配置和当前配置之间的差异。值defaults返回默认配置

GET /loki/api/v1/status/buildinfo:在 JSON 对象中公开构建信息。字段包括version,revision,branch,buildDate,buildUser,和goVersion。

注意:Loki http Api 官方说明 https://grafana.com/docs/loki/latest/api/

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/481039
推荐阅读
相关标签
  

闽ICP备14008679号