Grafana-Loki使用S3,Blob,OSS等对象存储持久化

1 篇文章 0 订阅
1 篇文章 0 订阅
文章详细介绍了如何在Kubernetes环境中部署Loki日志管理系统的单机版,重点在于持久化配置,包括服务账户、角色、角色绑定的设置。此外,还展示了如何配置Loki以使用阿里云OSS和AzureBlob进行数据存储,确保日志数据的安全和可靠性。
摘要由CSDN通过智能技术生成

Loki-单机版

关于Loki部署,这里着重介绍持久化的相关配置,直接上编排文件

编排文件

######################
## loki rbac
######################
apiVersion: v1
kind: ServiceAccount
metadata:
  name: loki
  namespace: loki

---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: loki
  namespace: loki
rules:
- apiGroups:
  - extensions
  resourceNames:
  - loki
  resources:
  - podsecuritypolicies
  verbs:
  - use

---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: loki
  namespace: loki
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: loki
subjects:
- kind: ServiceAccount
  name: loki


######################
## loki svc sts
######################
---
apiVersion: v1
kind: Service
metadata:
  name: loki
  namespace: loki
  labels:
    app: loki
spec:
  type: ClusterIP
  ports:
    - port: 3100
      protocol: TCP
      name: http-metrics
      targetPort: http-metrics
  selector:
    app: loki

---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: loki
  namespace: loki
  labels:
    app: loki
spec:
  podManagementPolicy: OrderedReady
  replicas: 1
  selector:
    matchLabels:
      app: loki
  serviceName: loki
  updateStrategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: loki
    spec:
      serviceAccount: loki
      serviceAccountName: loki
      securityContext:
        fsGroup: 10001
        runAsGroup: 10001
        runAsNonRoot: true
        runAsUser: 10001
      containers:
        - name: loki
          image: grafana/loki
          imagePullPolicy: Always
          args:
            - -config.file=/etc/loki/config/config.yaml
          volumeMounts:
            - name: config
              mountPath: /etc/loki/config
            - name: storage
              mountPath: /data
              subPath: "loki"
          ports:
            - name: http-metrics
              containerPort: 3100
              protocol: TCP
          livenessProbe:
            httpGet:
              path: /ready
              port: http-metrics
              scheme: HTTP
            initialDelaySeconds: 45
            timeoutSeconds: 1
            periodSeconds: 10
            successThreshold: 1
            failureThreshold: 3
          readinessProbe:
            httpGet:
              path: /ready
              port: http-metrics
              scheme: HTTP
            initialDelaySeconds: 45
            timeoutSeconds: 1
            periodSeconds: 10
            successThreshold: 1
            failureThreshold: 3
      volumes:
        - name: config
          configMap:
            defaultMode: 420
            name: loki
        - name: storage
          persistentVolumeClaim:
            claimName: loki-chunks-data

配置文件

######################
## loki configMap
######################
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: loki
  namespace: loki
  labels:
    app: loki
data:
  config.yaml: |
    auth_enabled: false
    ingester:
      chunk_idle_period: 3m      # 如果块没有达到最大的块大小,那么在刷新之前,块应该在内存中不更新多长时间
      chunk_block_size: 262144
      chunk_retain_period: 1m      # 块刷新后应该在内存中保留多长时间
      max_transfer_retries: 0      # Number of times to try and transfer chunks when leaving before falling back to flushing to the store. Zero = no transfers are done.
      lifecycler:       #配置ingester的生命周期,以及在哪里注册以进行发现
        ring:
          kvstore:
            store: inmemory      # 用于ring的后端存储,支持consul、etcd、inmemory
          replication_factor: 1      # 写入和读取的ingesters数量,至少为1(为了冗余和弹性,默认情况下为3)
      wal:
        enabled: true
        dir: /data/loki/wal
    limits_config:
      ingestion_rate_mb: 64
      ingestion_burst_size_mb: 128
      enforce_metric_name: false
      reject_old_samples: true      # 旧样品是否会被拒绝
      reject_old_samples_max_age: 168h      # 拒绝旧样本的最大时限
    schema_config:      # 配置从特定时间段开始应该使用哪些索引模式
      configs:
      - from: 2020-10-24      # 创建索引的日期。如果这是唯一的schema_config,则使用过去的日期,否则使用希望切换模式时的日期
        store: boltdb-shipper      # 索引使用哪个存储,如:cassandra, bigtable, dynamodb,或boltdb
        object_store: filesystem      # 用于块的存储,如:gcs, s3, inmemory, filesystem, cassandra,如果省略,默认值与store相同
        schema: v11
        index:      # 配置如何更新和存储索引
          prefix: index_      # 所有周期表的前缀
          period: 24h      # 表周期
    server:
      http_listen_port: 3100
    storage_config:      # 为索引和块配置一个或多个存储
      boltdb_shipper:
        active_index_directory: /data/loki/boltdb-shipper-active  # 活跃索引目录的位置
        cache_location: /data/loki/boltdb-shipper-cache  # 缓存索引文件
        cache_ttl: 24h
        shared_store: filesystem  # 存储 Loki 索引文件的共享存储后端
      filesystem:
        directory: /data/loki/chunks
    chunk_store_config:      # 配置如何缓存块,以及在将它们保存到存储之前等待多长时间
      max_look_back_period: 0s      #限制查询数据的时间,默认是禁用的,这个值应该小于或等于table_manager.retention_period中的值
    table_manager:
      retention_deletes_enabled: true      # 日志保留周期开关,用于表保留删除
      retention_period: 2520h       # 日志保留周期,保留期必须是索引/块的倍数
    compactor:
      working_directory: /data/loki/boltdb-shipper-compactor
      shared_store: filesystem

使用对象存储持久化

AWS S3, Aliyun OSS

使用 Loki的s3模块来设置与Aliyun OSS存储的连接,并在配置文件中指定相应的存储区域和访问密钥等信息

.........
schema_config:
  configs:
  - from: 2020-10-24 
    store: boltdb-shipper  # 索引存储,使用boltdb并持久化到pvc
    object_store: s3    # 块存储,使用aws s3模块访问aliyun oss
    schema: v11
    index:      
      prefix: index_ 
      period: 24h
.........
storage_config:      # 为索引和块配置一个或多个存储
  boltdb_shipper:    # Loki 存储层的一部分,它主要负责将从各个 Loki 实例收集到的日志数据写入本地文件系统中的 BoltDB 数据库,并在其中建立索引,以便后续查询时能够快速访问和检索所需的数据
    active_index_directory: /data/loki/boltdb-shipper-active  # 活跃索引目录的位置
    cache_location: /data/loki/boltdb-shipper-cache  # 缓存索引文件位置
    cache_ttl: 24h
    shared_store: s3  # 存储 Loki 索引文件的共享存储后端
  aws:
    bucketnames: mybucket-dev
    endpoint: oss-cn-zhangjiakou.aliyuncs.com
    access_key_id: ak
    secret_access_key: sk
    region: cn-zhangjiakou
  #filesystem:                    # 使用对象存储时需要将该配置注释掉
    #directory: /data/loki/chunks
.........
Azure Blob
StorageAccountKey
..........
schema_config:      
  configs:
  - from: 2020-10-24      
    store: boltdb-shipper      
    object_store: azure   #    
    schema: v11
    index:      
      prefix: index_      
      period: 24h     
..........
storage_config:  
  boltdb_shipper:
    active_index_directory: /data/loki/boltdb-shipper-active
    cache_location: /data/loki/boltdb-shipper-cache
    cache_ttl: 24h
    shared_store: azure
  azure:
    account_name: <StorageAccount-Name>
    account_key: <StorageAccount-Key>
    container_name: <Container-Name>
    environment: AzureChinaCloud   
    #storage_endpoint: https://<storageAccount-Name>.blob.core.chinacloudapi.cn   # ChatGPT给的,启动失败,提示没有该配置项
    #endpoint_suffix: https://<storageAccount-Name>.blob.core.chinacloudapi.cn   # 官方文档给的参数,启动失败,提示没有该配置项
    #use_managed_identity:  # true/false
    #user_assigned_id:    # user-assigned-identity-id
..........
Loki是一个开源的分布式日志聚合系统,它可以将多个不同来源的日志数据聚合到一个统一的地方,并提供了强大的搜索和查询功能。Loki的配置文件包含了Loki的所有配置信息,下面是对Loki配置文件的详细解释: 1. server段 server段包含了Loki服务器的配置信息,包括监听地址和端口、存储位置、日志级别等。 示例: ``` server: http_listen_port: 3100 grpc_listen_port: 9095 log_level: info config: auth_enabled: false server: http_listen_port: 3100 grpc_listen_port: 9095 ``` 2. schema_config段 schema_config段用于配置Loki的日志格式,包括日志标签和日志字段。可以使用正则表达式来匹配日志标签和字段。 示例: ``` schema_config: configs: - from: 2022-01-01 store: boltdb object_store: filesystem schema: v11 index: prefix: index_ period: 24h retention_policy: 24h max_look_back_period: 0s storage_config: boltdb: directory: /var/lib/loki/boltdb filesystem: directory: /var/lib/loki/chunks ``` 3. storage_config段 storage_config段用于配置Loki的存储方式,包括数据存储路径、存储类型等。可以使用多种存储类型,如local、s3、gcs等。 示例: ``` storage_config: boltdb: directory: /var/lib/loki/boltdb filesystem: directory: /var/lib/loki/chunks ``` 4. ingester段 ingester段用于配置Loki的数据输入方式,包括文件输入、stdin输入、http输入等。可以配置多个输入方式。 示例: ``` ingester: lifecycler: address: 127.0.0.1 ring: kvstore: store: inmemory replication_factor: 1 heartbeat_timeout: 1m election_timeout: 10s retry_period: 5s startup_timeout: 5s chunk_idle_period: 5m chunk_retain_period: 30m max_transfer_retries: 0 fail_on_unhandled_request: false client: url: http://localhost:3100/api/prom/push ``` 5. querier段 querier段用于配置Loki的查询方式,包括查询语法、查询参数等。可以配置多个查询方式。 示例: ``` querier: query_range: max_samples: 50000000 query: max_concurrent: 20 cache: cache: max_size_items: 0 index: max_size_bytes: 0 ``` 6. compactor段 compactor段用于配置Loki的压缩方式,包括压缩周期、压缩方式等。可以配置多个压缩方式。 示例: ``` compactor: working_directory: /var/lib/loki/compactor shared_store: filesystem shared_storage_config: filesystem: directory: /var/lib/loki/compactor compaction: working_directory: /var/lib/loki/compactor shared_store: filesystem shared_storage_config: filesystem: directory: /var/lib/loki/compactor compaction_window: 1h ``` 7. ruler段 ruler段用于配置Loki的告警规则,包括告警条件、告警方式等。可以配置多个告警规则。 示例: ``` ruler: storage: type: local local: directory: /etc/loki/rules rule_path: /etc/loki/rules alertmanager_url: http://localhost:9093 ring: kvstore: store: inmemory replication_factor: 1 heartbeat_timeout: 1m election_timeout: 10s retry_period: 5s startup_timeout: 5s ``` 这些是Loki配置文件的主要部分,通过配置文件可以自定义Loki的各种配置项,满足不同的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值