菜单
文档breadcrumb arrow Grafana Lokibreadcrumb arrow 设置breadcrumb arrow 安装breadcrumb arrow 使用 Helm 安装breadcrumb arrow 监控breadcrumb arrow 使用 Grafana Cloud 监控 Loki
开源

使用 Grafana Cloud 监控 Loki

本指南将引导您使用 Grafana Cloud 监控通过 meta-monitoring Helm Chart 设置的 Loki 安装。这种方法利用了 Chart 的许多自监控功能,将 Loki 部署的指标、日志和追踪发送到 Grafana Cloud。使用 Grafana Cloud 监控 Loki 的另一个好处是,即使 Helm 安装的 Loki 出现故障,遥测数据仍可在 Grafana Cloud 实例中查看,从而有助于排查问题。

这些说明基于 meta-monitoring-chart 仓库

开始之前

  • Helm 3 或更高版本。请参阅 安装 Helm
  • 一个 Grafana Cloud 账户和技术栈(包括 Cloud Grafana、Cloud Metrics 和 Cloud Logs)。
  • 通过 Helm Chart 安装在该 Kubernetes 集群中的正在运行的 Loki 部署。

配置 meta 命名空间

meta-monitoring 技术栈将安装在一个单独的命名空间中,命名为 meta。要创建此命名空间,请运行以下命令

bash
  kubectl create namespace meta

Grafana Cloud 连接凭证

meta-monitoring 技术栈会将指标、日志和追踪发送到 Grafana Cloud。这要求您知道您的 Grafana Cloud 连接凭证。要获取连接凭证,请按照以下步骤操作

  1. 在 Grafana Cloud 中创建一个新的 Cloud 访问策略。

    1. 登录 Grafana Cloud
    2. 在主菜单中,选择 安全性 > 访问策略
    3. 点击 创建访问策略
    4. 为策略指定一个名称并选择以下权限
      • 指标:写入
      • 日志:写入
      • 追踪:写入
  2. 点击 创建

  3. 策略创建后,选择该策略并点击 添加令牌

  4. 为令牌命名,选择过期日期,然后点击 创建

  5. 将令牌复制到安全位置,因为它不会再次显示。

  6. 导航到 Grafana Cloud Portal 的概览页面。

  7. 点击您的 Prometheus 或 Mimir 实例对应的详情按钮。

    1. 在**使用自托管 Grafana 实例与 Grafana Cloud Metrics** 部分,收集实例的**名称**和 **URL**。
    2. 导航回**概览**页面。
  8. 点击您的 Loki 实例对应的**详情**按钮。

    1. 在**使用 Grafana 与日志** 部分,收集实例的**名称**和 **URL**。
    2. 导航回**概览**页面。
  9. 点击您的 Tempo 实例对应的**详情**按钮。

    1. 在**使用 Grafana 与 Tempo** 部分,收集实例的**名称**和 **URL**。
  10. 最后,生成 Secret 以在您的 Kubernetes 集群中存储每种指标类型的凭证

    bash
       kubectl create secret generic logs -n meta \
         --from-literal=username=<USERNAME LOGS> \
         --from-literal= <ACCESS POLICY TOKEN> \
         --from-literal=endpoint='https://<LOG URL>/loki/api/v1/push'
    
         kubectl create secret generic metrics -n meta \
         --from-literal=username=<USERNAME METRICS> \
         --from-literal=password=<ACCESS POLICY TOKEN> \
         --from-literal=endpoint='https://<METRICS URL>/api/prom/push'
    
         kubectl create secret generic traces -n meta \
         --from-literal=username=<OTLP INSTANCE ID> \
         --from-literal=password=<ACCESS POLICY TOKEN> \
         --from-literal=endpoint='https://<OTLP URL>/otlp'

配置与安装

要安装 meta-monitoring Helm Chart,您必须创建一个 values.yaml 文件。该文件至少应包含以下内容

  • 要监控的命名空间
  • 启用云监控

values.yaml 示例文件提供了监控 loki 命名空间的最低配置

yaml
  namespacesToMonitor:
  - default

  cloud:
    logs:
      enabled: true
      secret: "logs"
    metrics:
      enabled: true
      secret: "metrics"
    traces:
      enabled: true
      secret: "traces"

如需更多配置选项,请参考 示例 values.yaml 文件

要安装 meta-monitoring Helm Chart,请运行以下命令

bash
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm install meta-monitoring grafana/meta-monitoring -n meta -f values.yaml 

或升级配置时

bash
helm upgrade meta-monitoring grafana/meta-monitoring -n meta -f values.yaml 

要验证安装,请运行以下命令

bash
kubectl get pods -n meta

它应返回以下 Pod

bash
NAME           READY   STATUS    RESTARTS   AGE
meta-alloy-0   2/2     Running   0          23h
meta-alloy-1   2/2     Running   0          23h
meta-alloy-2   2/2     Running   0          23h

启用 Loki 追踪

默认情况下,Loki 未启用追踪。要启用追踪,请编辑 values.yaml 文件并添加以下配置来修改 Loki 配置

tracing.enabled 配置设置为 true

yaml
loki:
  tracing:
    enabled: true

接下来,为每个 Loki 组件添加插桩以将追踪发送到 meta-monitoring 技术栈。为每个 Loki 组件添加 extraEnv 配置

yaml
ingester:
  replicas: 3
  extraEnv:
    - name: JAEGER_ENDPOINT
      value: "http://mmc-alloy-external.default.svc.cluster.local:14268/api/traces"
      # This sets the Jaeger endpoint where traces will be sent.
      # The endpoint points to the mmc-alloy service in the default namespace at port 14268.
      
    - name: JAEGER_AGENT_TAGS
      value: 'cluster="prod",namespace="default"'
      # This specifies additional tags to attach to each span.
      # Here, the cluster is labeled as "prod" and the namespace as "default".
      
    - name: JAEGER_SAMPLER_TYPE
      value: "ratelimiting"
      # This sets the sampling strategy for traces.
      # "ratelimiting" means that traces will be sampled at a fixed rate.
      
    - name: JAEGER_SAMPLER_PARAM
      value: "1.0"
      # This sets the parameter for the sampler.
      # For ratelimiting, "1.0" typically means one trace per second.

由于 meta-monitoring 技术栈安装在 meta 命名空间中,Loki 组件需要能够与 meta-monitoring 技术栈通信。为此,请在 default 命名空间中创建一个新的指向 meta 命名空间的 externalname Service,运行以下命令

bash
kubectl create service externalname mmc-alloy-external --external-name meta-alloy.meta.svc.cluster.local -n default

最后,使用新配置升级 Loki 安装

bash
helm upgrade --values values.yaml loki grafana/loki

将 Loki 仪表盘导入 Grafana Cloud

meta-monitoring 技术栈包含一组可以导入 Grafana Cloud 的仪表盘。这些可以在 meta-monitoring 仓库中找到。

安装规则

meta-monitoring 技术栈包含一组可以安装用于监控 Loki 安装的规则。这些规则可以在 meta-monitoring 仓库中找到。要安装规则

  1. 克隆仓库
    bash
    git clone https://github.com/grafana/meta-monitoring-chart/
  2. 根据 此处 的说明安装 mimirtool
  3. 在 Grafana Cloud 中创建一个新的访问策略令牌,并具备以下权限
    • 规则:写入
    • 规则:读取
  4. 为访问策略创建一个令牌并将其复制到安全位置。
  5. 安装规则
    bash
    mimirtool rules load --address=<your_cloud_prometheus_endpoint> --id=<your_instance_id> --key=<your_cloud_access_policy_token> *.yaml
  6. 验证规则是否已安装
    bash
     mimirtool rules list --address=<your_cloud_prometheus_endpoint> --id=<your_instance_id> --key=<your_cloud_access_policy_token>
    它应该返回已安装规则的列表。
    bash
    
    loki-rules:
     - name: loki_rules
       rules:
         - record: cluster_job:loki_request_duration_seconds:99quantile
           expr: histogram_quantile(0.99, sum(rate(loki_request_duration_seconds_bucket[5m])) by (le, cluster, job))
         - record: cluster_job:loki_request_duration_seconds:50quantile
           expr: histogram_quantile(0.50, sum(rate(loki_request_duration_seconds_bucket[5m])) by (le, cluster, job))
         - record: cluster_job:loki_request_duration_seconds:avg
           expr: sum(rate(loki_request_duration_seconds_sum[5m])) by (cluster, job) / sum(rate(loki_request_duration_seconds_count[5m])) by (cluster, job)
         - record: cluster_job:loki_request_duration_seconds_bucket:sum_rate
           expr: sum(rate(loki_request_duration_seconds_bucket[5m])) by (le, cluster, job)
         - record: cluster_job:loki_request_duration_seconds_sum:sum_rate
           expr: sum(rate(loki_request_duration_seconds_sum[5m])) by (cluster, job)
         - record: cluster_job:loki_request_duration_seconds_count:sum_rate
           expr: sum(rate(loki_request_duration_seconds_count[5m])) by (cluster, job)
         - record: cluster_job_route:loki_request_duration_seconds:99quantile
           expr: histogram_quantile(0.99, sum(rate(loki_request_duration_seconds_bucket[5m])) by (le, cluster, job, route))
         - record: cluster_job_route:loki_request_duration_seconds:50quantile
           expr: histogram_quantile(0.50, sum(rate(loki_request_duration_seconds_bucket[5m])) by (le, cluster, job, route))
         - record: cluster_job_route:loki_request_duration_seconds:avg
           expr: sum(rate(loki_request_duration_seconds_sum[5m])) by (cluster, job, route) / sum(rate(loki_request_duration_seconds_count[5m])) by (cluster, job, route)
         - record: cluster_job_route:loki_request_duration_seconds_bucket:sum_rate
           expr: sum(rate(loki_request_duration_seconds_bucket[5m])) by (le, cluster, job, route)
         - record: cluster_job_route:loki_request_duration_seconds_sum:sum_rate
           expr: sum(rate(loki_request_duration_seconds_sum[5m])) by (cluster, job, route)
         - record: cluster_job_route:loki_request_duration_seconds_count:sum_rate
           expr: sum(rate(loki_request_duration_seconds_count[5m])) by (cluster, job, route)
         - record: cluster_namespace_job_route:loki_request_duration_seconds:99quantile
           expr: histogram_quantile(0.99, sum(rate(loki_request_duration_seconds_bucket[5m])) by (le, cluster, namespace, job, route))
         - record: cluster_namespace_job_route:loki_request_duration_seconds:50quantile
           expr: histogram_quantile(0.50, sum(rate(loki_request_duration_seconds_bucket[5m])) by (le, cluster, namespace, job, route))
         - record: cluster_namespace_job_route:loki_request_duration_seconds:avg
           expr: sum(rate(loki_request_duration_seconds_sum[5m])) by (cluster, namespace, job, route) / sum(rate(loki_request_duration_seconds_count[5m])) by (cluster, namespace, job, route)
         - record: cluster_namespace_job_route:loki_request_duration_seconds_bucket:sum_rate
           expr: sum(rate(loki_request_duration_seconds_bucket[5m])) by (le, cluster, namespace, job, route)
         - record: cluster_namespace_job_route:loki_request_duration_seconds_sum:sum_rate
           expr: sum(rate(loki_request_duration_seconds_sum[5m])) by (cluster, namespace, job, route)
         - record: cluster_namespace_job_route:loki_request_duration_seconds_count:sum_rate
           expr: sum(rate(loki_request_duration_seconds_count[5m])) by (cluster, namespace, job, route)

安装 kube-state-metrics

关于 Kubernetes 对象的指标是从 kube-state-metrics 抓取的。这需要在集群中安装。meta-monitoring values.yaml 中的 kubeStateMetrics.endpoint 条目应设置为其地址(不包含 URL 中的 /metrics 部分)

yaml
kubeStateMetrics:
  # Scrape https://github.com/kubernetes/kube-state-metrics by default
  enabled: true
  # This endpoint is created when the helm chart from
  # https://artifacthub.io/packages/helm/prometheus-community/kube-state-metrics/
  # is used. Change this if kube-state-metrics is installed somewhere else.
  endpoint: kube-state-metrics.kube-state-metrics.svc.cluster.local:8080