Grafana Loki在Azure上的Helm部署指南

Grafana Loki在Azure上的Helm部署指南

loki Loki是一个开源、高扩展性和多租户的日志聚合系统,由Grafana Labs开发。它主要用于收集、存储和查询大量日志数据,并通过标签索引提供高效检索能力。Loki特别适用于监控场景,与Grafana可视化平台深度集成,帮助用户快速分析和发现问题。 loki 项目地址: https://gitcode.com/gh_mirrors/lok/loki

前言

Grafana Loki是一个水平可扩展、高可用性、多租户的日志聚合系统,专为效率和易用性而设计。本文将详细介绍如何在Azure云平台上使用Helm图表部署Loki的微服务模式,并重点讲解如何通过联邦令牌实现安全的身份验证机制。

核心概念解析

在开始部署前,我们需要理解几个关键概念:

  1. 微服务模式:Loki的分布式部署方式,各组件(如ingester、querier等)作为独立服务运行
  2. 联邦令牌:Azure AD提供的安全凭证,允许Kubernetes工作负载访问Azure资源而无需存储凭证
  3. TSDB存储:Loki v2.0引入的存储引擎,显著提高了查询性能

环境准备

工具要求

  • Helm 3+:Kubernetes包管理工具
  • kubectl:Kubernetes命令行工具
  • Azure CLI:Azure云平台管理工具

基础设施要求

  1. AKS集群

    • Kubernetes版本≥1.30
    • 3个节点(生产环境建议更多)
    • 节点规格:
      • 测试环境:Standard_E2ds_v5
      • 生产环境:Standard_D4_v5
  2. 存储资源

    • Azure Blob Storage账户
    • 两个容器:
      • chunks:存储日志数据
      • ruler:存储告警规则

详细部署步骤

1. 创建AKS集群

az group create --name loki-rg --location eastus

az aks create \
  --resource-group loki-rg \
  --name loki-cluster \
  --node-count 3 \
  --node-vm-size Standard_E2ds_v5 \
  --enable-workload-identity \
  --enable-oidc-issuer

关键参数说明:

  • --enable-workload-identity:启用工作负载身份功能
  • --enable-oidc-issuer:启用OIDC发行者

2. 配置Blob Storage

# 创建存储账户
az storage account create \
  --name lokistorage \
  --location eastus \
  --sku Standard_ZRS \
  --resource-group loki-rg

# 创建容器
az storage container create \
  --account-name lokistorage \
  --name loki-chunks \
  --auth-mode login

az storage container create \
  --account-name lokistorage \
  --name loki-ruler \
  --auth-mode login

安全建议:

  • 使用ZRS冗余确保数据高可用
  • 为不同环境使用不同的容器名称

3. 配置身份认证

获取OIDC发行者URL
az aks show \
  --resource-group loki-rg \
  --name loki-cluster \
  --query "oidcIssuerProfile.issuerUrl" \
  -o tsv
创建Azure AD应用
appId=$(az ad app create \
  --display-name loki \
  --query appId \
  -o tsv)

az ad sp create --id $appId
配置联邦凭证

创建credentials.json文件:

{
    "name": "LokiFederatedIdentity",
    "issuer": "<OIDC-URL>",
    "subject": "system:serviceaccount:loki:loki",
    "audiences": ["api://AzureADTokenExchange"]
}

应用配置:

az ad app federated-credential create \
  --id $appId \
  --parameters credentials.json
分配存储权限
az role assignment create \
  --role "Storage Blob Data Contributor" \
  --assignee $appId \
  --scope /subscriptions/<sub-id>/resourceGroups/loki-rg/providers/Microsoft.Storage/storageAccounts/lokistorage

4. 部署Loki Helm图表

基础认证配置
# 创建认证文件
htpasswd -c .htpasswd loki-user

# 创建Kubernetes Secret
kubectl create secret generic loki-basic-auth \
  --from-file=.htpasswd \
  -n loki

kubectl create secret generic canary-basic-auth \
  --from-literal=username=loki-user \
  --from-literal=password=your-password \
  -n loki
values.yaml关键配置
loki:
  storage_config:
    azure:
      account_name: "lokistorage"
      container_name: "loki-chunks"
      use_federated_token: true
  
  ruler:
    storage:
      azure:
        account_name: "lokistorage"
        container_name: "loki-ruler"
        use_federated_token: true

serviceAccount:
  annotations:
    "azure.workload.identity/client-id": "<app-id>"

gateway:
  basicAuth:
    enabled: true
    existingSecret: loki-basic-auth
执行部署
helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm install loki grafana/loki -n loki -f values.yaml

配置详解

存储架构

  1. TSDB索引

    • 从2024-04-01开始使用v13模式
    • 24小时为一个索引周期
    • 前缀为loki_index_
  2. 数据保留

    • 默认28天(672小时)
    • 通过compactor组件实现

组件副本配置

| 组件 | 副本数 | 最大不可用 | |---------------|--------|------------| | Ingester | 3 | 2 | | Querier | 3 | 2 | | QueryFrontend | 2 | 1 | | IndexGateway | 2 | 1 |

安全配置

  1. 认证层

    • 通过NGINX Gateway提供基础认证
    • 所有外部请求必须提供凭证
  2. 网络隔离

    • Gateway使用LoadBalancer类型
    • 内部组件使用ClusterIP

验证部署

kubectl get pods -n loki -w

# 检查服务状态
kubectl get svc -n loki

预期输出应显示所有Pod处于Running状态,gateway服务有外部IP。

生产环境建议

  1. 监控

    • 部署Loki自监控
    • 设置Azure Monitor告警
  2. 扩展性

    • 根据负载调整各组件副本数
    • 考虑使用专用节点组
  3. 备份

    • 配置存储账户的定期备份
    • 测试灾难恢复流程

常见问题排查

  1. 认证失败

    • 检查联邦凭证的subject是否匹配
    • 验证服务账户注解是否正确
  2. 存储访问问题

    • 检查角色分配
    • 验证容器名称拼写
  3. 性能问题

    • 调整查询并发数
    • 检查索引配置

通过本文的详细指导,您应该能够在Azure上成功部署生产可用的Grafana Loki集群。这种部署方式充分利用了Azure的托管服务和安全特性,是企业在云环境中实施日志解决方案的理想选择。

loki Loki是一个开源、高扩展性和多租户的日志聚合系统,由Grafana Labs开发。它主要用于收集、存储和查询大量日志数据,并通过标签索引提供高效检索能力。Loki特别适用于监控场景,与Grafana可视化平台深度集成,帮助用户快速分析和发现问题。 loki 项目地址: https://gitcode.com/gh_mirrors/lok/loki

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邵冠敬Robin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值