使用 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
。要创建此命名空间,请运行以下命令
kubectl create namespace meta
Grafana Cloud 连接凭证
meta-monitoring 技术栈会将指标、日志和追踪发送到 Grafana Cloud。这要求您知道您的 Grafana Cloud 连接凭证。要获取连接凭证,请按照以下步骤操作
在 Grafana Cloud 中创建一个新的 Cloud 访问策略。
- 登录 Grafana Cloud。
- 在主菜单中,选择 安全性 > 访问策略。
- 点击 创建访问策略。
- 为策略指定一个名称并选择以下权限
- 指标:写入
- 日志:写入
- 追踪:写入
点击 创建。
策略创建后,选择该策略并点击 添加令牌。
为令牌命名,选择过期日期,然后点击 创建。
将令牌复制到安全位置,因为它不会再次显示。
导航到 Grafana Cloud Portal 的概览页面。
点击您的 Prometheus 或 Mimir 实例对应的详情按钮。
- 在**使用自托管 Grafana 实例与 Grafana Cloud Metrics** 部分,收集实例的**名称**和 **URL**。
- 导航回**概览**页面。
点击您的 Loki 实例对应的**详情**按钮。
- 在**使用 Grafana 与日志** 部分,收集实例的**名称**和 **URL**。
- 导航回**概览**页面。
点击您的 Tempo 实例对应的**详情**按钮。
- 在**使用 Grafana 与 Tempo** 部分,收集实例的**名称**和 **URL**。
最后,生成 Secret 以在您的 Kubernetes 集群中存储每种指标类型的凭证
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
命名空间的最低配置
namespacesToMonitor:
- default
cloud:
logs:
enabled: true
secret: "logs"
metrics:
enabled: true
secret: "metrics"
traces:
enabled: true
secret: "traces"
如需更多配置选项,请参考 示例 values.yaml 文件。
要安装 meta-monitoring
Helm Chart,请运行以下命令
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
或升级配置时
helm upgrade meta-monitoring grafana/meta-monitoring -n meta -f values.yaml
要验证安装,请运行以下命令
kubectl get pods -n meta
它应返回以下 Pod
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
loki:
tracing:
enabled: true
接下来,为每个 Loki 组件添加插桩以将追踪发送到 meta-monitoring 技术栈。为每个 Loki 组件添加 extraEnv
配置
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,运行以下命令
kubectl create service externalname mmc-alloy-external --external-name meta-alloy.meta.svc.cluster.local -n default
最后,使用新配置升级 Loki 安装
helm upgrade --values values.yaml loki grafana/loki
将 Loki 仪表盘导入 Grafana Cloud
meta-monitoring 技术栈包含一组可以导入 Grafana Cloud 的仪表盘。这些可以在 meta-monitoring 仓库中找到。
安装规则
meta-monitoring 技术栈包含一组可以安装用于监控 Loki 安装的规则。这些规则可以在 meta-monitoring 仓库中找到。要安装规则
- 克隆仓库
git clone https://github.com/grafana/meta-monitoring-chart/
- 根据 此处 的说明安装
mimirtool
- 在 Grafana Cloud 中创建一个新的访问策略令牌,并具备以下权限
- 规则:写入
- 规则:读取
- 为访问策略创建一个令牌并将其复制到安全位置。
- 安装规则
mimirtool rules load --address=<your_cloud_prometheus_endpoint> --id=<your_instance_id> --key=<your_cloud_access_policy_token> *.yaml
- 验证规则是否已安装它应该返回已安装规则的列表。
mimirtool rules list --address=<your_cloud_prometheus_endpoint> --id=<your_instance_id> --key=<your_cloud_access_policy_token>
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
部分)
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