Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >部署loki采集kubernetes容器日志

部署loki采集kubernetes容器日志

作者头像
锅总
发布于 2024-06-12 07:08:11
发布于 2024-06-12 07:08:11
30000
代码可运行
举报
文章被收录于专栏:锅总锅总
运行总次数:0
代码可运行

loki简介

Grafana Loki is a set of components that can be composed into a fully featured logging stack. Unlike other logging systems, Loki is built around the idea of only indexing metadata about your logs: labels (just like Prometheus labels). Log data itself is then compressed and stored in chunks in object stores such as Amazon Simple Storage Service (S3) or Google Cloud Storage (GCS), or even locally on the filesystem. A small index and highly compressed chunks simplifies the operation and significantly lowers the cost of Loki.

部署方式

  • 所有服务部署在rancher中
  • 容器日志采集端Promtail用DaemonSet部署
  • 容器日志接收端Loki用Deployment部署
  • 容器日志查看Grafana用Deployment部署

准备yaml文件

1. loki.yaml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    workload.user.cattle.io/workloadselector: deployment-default-loki
  name: loki
  namespace: default
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      workload.user.cattle.io/workloadselector: deployment-default-loki
  strategy:
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
    type: RollingUpdate
  template:
    metadata:
      labels:
        workload.user.cattle.io/workloadselector: deployment-default-loki
    spec:
      containers:
      - args:
        - -config.file=/mnt/config/loki-config.yaml
        image: grafana/loki:2.9.7
        imagePullPolicy: Always
        name: loki
        ports:
        - containerPort: 3100
          name: http-3100
          protocol: TCP
        resources: {}
        securityContext:
          allowPrivilegeEscalation: false
          capabilities: {}
          privileged: false
          readOnlyRootFilesystem: false
          runAsNonRoot: false
        stdin: true
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        tty: true
        volumeMounts:
        - mountPath: /mnt/config
          name: vol1
        - mountPath: /tmp/loki/
          name: vol2
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      volumes:
      - configMap:
          defaultMode: 511
          name: loki-config
          optional: false
        name: vol1
      - hostPath:
          path: /data/local-storage/loki-data
          type: ""
        name: vol2

---
apiVersion: v1
kind: Service
metadata:
  name: loki
  namespace: default
spec:
  ports:
  - name: http-3100
    port: 3100
    protocol: TCP
    targetPort: 3100
  selector:
    workload.user.cattle.io/workloadselector: deployment-default-loki
  type: ClusterIP

---
apiVersion: v1
data:
  loki-config.yaml: |-
    auth_enabled: false

    server:
      http_listen_port: 3100
      grpc_listen_port: 9096

    common:
      instance_addr: 0.0.0.0
      path_prefix: /tmp/loki
      storage:
        filesystem:
          chunks_directory: /tmp/loki/chunks
          rules_directory: /tmp/loki/rules
      replication_factor: 1
      ring:
        kvstore:
          store: inmemory

    query_range:
      results_cache:
        cache:
          embedded_cache:
            enabled: true
            max_size_mb: 100

    schema_config:
      configs:
        - from: 2020-10-24
          store: boltdb-shipper
          object_store: filesystem
          schema: v11
          index:
            prefix: index_
            period: 24h
    table_manager:
      retention_deletes_enabled: true
      retention_period: 72h #日志保存多久
kind: ConfigMap
  name: loki-config
  namespace: default

2. Promtail.yaml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--- 
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: promtail-daemonset
  namespace: default
spec:
  selector:
    matchLabels:
      name: promtail
  template:
    metadata:
      labels:
        name: promtail
    spec:
      containers:
      - args:
        - -config.file=/etc/promtail/promtail.yaml
        env:
        - name: HOSTNAME
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: spec.nodeName
        image: grafana/promtail:2.9.7
        imagePullPolicy: IfNotPresent
        name: promtail-container
        resources: {}
        securityContext:
          capabilities: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /var/log
          name: logs
        - mountPath: /data/docker/containers
          name: varlibdockercontainers
          readOnly: true
        - mountPath: /etc/promtail
          name: promtail-config
        - mountPath: /tmp/
          name: vol1
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      serviceAccount: promtail-serviceaccount
      serviceAccountName: promtail-serviceaccount
      terminationGracePeriodSeconds: 30
      volumes:
      - hostPath:
          path: /var/log
          type: ""
        name: logs
      - hostPath:
          path: /data/docker/containers #这里的/data/docker根据具体的docker数据目录而定,可通过 docker info | grep "Docker Root Dir" 命令查看
          type: ""
        name: varlibdockercontainers
      - configMap:
          defaultMode: 420
          name: promtail-config
        name: promtail-config
      - hostPath:
          path: /data/local-storage/promtail-data
          type: ""
        name: vol1
  updateStrategy:
    rollingUpdate:
      maxUnavailable: 1
    type: RollingUpdate

--- 
apiVersion: v1
kind: ConfigMap
metadata:
  name: promtail-config
data:
  promtail.yaml: |
    server:
      http_listen_port: 9080
      grpc_listen_port: 0

    clients:
    - url: https://loki.defautl.svc:3100/loki/api/v1/push 

    positions:
      filename: /tmp/positions.yaml
    target_config:
      sync_period: 10s
    scrape_configs:
    - job_name: pod-logs
      kubernetes_sd_configs:
        - role: pod
      pipeline_stages:
        - docker: {}
      relabel_configs:
        - source_labels:
            - __meta_kubernetes_pod_node_name
          target_label: __host__
        - action: labelmap
          regex: __meta_kubernetes_pod_label_(.+)
        - action: replace
          replacement: $1
          separator: /
          source_labels:
            - __meta_kubernetes_namespace
            - __meta_kubernetes_pod_name
          target_label: job
        - action: replace
          source_labels:
            - __meta_kubernetes_namespace
          target_label: namespace
        - action: replace
          source_labels:
            - __meta_kubernetes_pod_name
          target_label: pod
        - action: replace
          source_labels:
            - __meta_kubernetes_pod_container_name
          target_label: container
        - replacement: /var/log/pods/*$1/*.log
          separator: /
          source_labels:
            - __meta_kubernetes_pod_uid
            - __meta_kubernetes_pod_container_name
          target_label: __path__

--- 
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: promtail-clusterrole
rules:
  - apiGroups: [""]
    resources:
    - nodes
    - services
    - pods
    verbs:
    - get
    - watch
    - list

--- 
apiVersion: v1
kind: ServiceAccount
metadata:
  name: promtail-serviceaccount

--- 
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: promtail-clusterrolebinding
subjects:
    - kind: ServiceAccount
      name: promtail-serviceaccount
      namespace: default
roleRef:
    kind: ClusterRole
    name: promtail-clusterrole
    apiGroup: rbac.authorization.k8s.io

3. Grafana.yaml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: grafana
  name: grafana
  namespace: default
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: grafana
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
      labels:
        app: grafana
    spec:
      containers:
      - image: grafana/grafana:10.0.0
        imagePullPolicy: IfNotPresent
        livenessProbe:
          failureThreshold: 3
          initialDelaySeconds: 30
          periodSeconds: 10
          successThreshold: 1
          tcpSocket:
            port: 3000
          timeoutSeconds: 1
        name: grafana
        ports:
        - containerPort: 3000
          name: http-grafana
          protocol: TCP
        readinessProbe:
          failureThreshold: 3
          httpGet:
            path: /robots.txt
            port: 3000
            scheme: HTTP
          initialDelaySeconds: 10
          periodSeconds: 30
          successThreshold: 1
          timeoutSeconds: 2
        resources:
          requests:
            cpu: 250m
            memory: 750Mi
        securityContext:
          capabilities: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        - mountPath: /var/lib/grafana
          name: vol1
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext:
        fsGroup: 472
        supplementalGroups:
        - 0
      terminationGracePeriodSeconds: 30
      volumes:
      - hostPath:
          path: /data/local-storage/grafana-data
          type: ""
        name: vol1
---
apiVersion: v1
kind: Service
metadata:
  name: grafana
  namespace: default
spec:
  ports:
  - port: 3000
    protocol: TCP
    targetPort: 3000
  selector:
    app: "grafana"
  sessionAffinity: None
  type: ClusterIP

---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: grafana
  namespace: default
spec:
  rules:
  - host: grafana.demo.com
    http:
      paths:
      - backend:
          serviceName: grafana
          servicePort: 3000
        pathType: ImplementationSpecific
  tls:
  - hosts:
    - grafana.demo.com

执行部署命令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
kubectl apply -f loki.yaml
kubectl apply -f Promtail.yaml
kubectl apply -f Grafana.yaml

grafana启动后需要加入loki数据源

部署效果

可以愉快的查日志了

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 锅总 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
kubernetes | loki 开源日志框架
基于 centos7.9,docker-ce-20.10.18,kubelet-1.22.3-0,kube-prometheus-0.10
Amadeus
2023/04/27
8340
kubernetes | loki 开源日志框架
loki (二) 部署
基于 centos7.9 docker-ce-20.10.18 kubelet-1.22.3-0 loki-2.3.0 promtail-2.3.0
Amadeus
2023/05/03
1.6K0
loki (二) 部署
Loki 日志系统详解
最近,在对公司容器云的日志方案进行设计的时候,发现主流的ELK或者EFK比较重,再加上现阶段对于ES复杂的搜索功能很多都用不上最终选择了Grafana开源的Loki日志系统,下面介绍下Loki的背景。
玄姐谈AGI
2021/10/12
2K0
Kubernetes集群日志-使用Loki实现高效日志分析和查询
Grafana Loki 是一个水平可扩展,高可用性,多租户的日志聚合系统,Loki 是基于仅索引有关日志元数据的想法而构建的:标签(就像 Prometheus 标签一样)。日志数据本身被压缩然后并存储在对象存储(例如 S3 或 GCS)的块中,甚至存储在本地文件系统上,轻量级的索引和高度压缩的块简化了操作,并显著降低了 Loki 的成本,Loki 更适合中小团队。由于 Loki 使用和 Prometheus 类似的标签概念,所以如果你熟悉 Prometheus 那么将很容易上手,也可以直接和 Grafana 集成,只需要添加 Loki 数据源就可以开始查询日志数据了。
王先森sec
2023/12/11
3.8K2
Kubernetes集群日志-使用Loki实现高效日志分析和查询
grafana tempo结合loki实现分布式追踪
Grafana Tempo是一个开源、易于使用的大规模分布式追踪后端.Tempo可以节约成本,仅需要对象存储即可运行,并且与Grafana,Prometheus和Loki深度集成.Tempo可以与任何开源跟踪协议一起使用,包括Jaeger、Zipkin和OpenTelemetry。它仅支持键/值查找,并且旨在与用于发现的日志和度量标准(示例性)协同工作.Tempo与Jaeger,Zipkin,OpenCensus和OpenTelemetry兼容.它以任何上述格式提取批处理,对其进行缓冲,然后将其写入GCS,S3或本地磁盘.因此,它强大、便宜且易于操作!
有点技术
2020/11/09
3.8K0
grafana tempo结合loki实现分布式追踪
Grafana 系列文章(十四):Helm 安装Loki
1.启用 Prometheus Operator Service Monitor 做监控2.增加external_labels - cluster, 以识别是哪个 K8S 集群;3.pipeline_stages 改为 cri, 以对 cri 日志做处理(因为我的集群用的 Container Runtime 是 CRI, 而 Loki Helm 默认配置是 docker)4.增加对 systemd-journal 的日志收集:
东风微鸣
2022/06/14
2.1K0
Grafana 系列文章(十四):Helm 安装Loki
你还在用笨重的 ELK?这个轻量级日志新贵了解一下
最近,在对公司容器云的日志方案进行设计的时候,发现主流的ELK或者EFK比较重,再加上现阶段对于ES复杂的搜索功能很多都用不上最终选择了Grafana开源的Loki日志系统,下面介绍下Loki的背景。
用户8639654
2021/08/23
7790
kubernetes日志采集Loki(二)
安装并配置Loki后,需要为应用程序创建一个Loki的数据源。可以使用以下步骤,将Loki的数据源部署到Kubernetes集群中:
玖叁叁
2023/05/04
6300
Kubernetes集群监控方案详解
本文介绍在k8s集群中使用node-exporter、prometheus、grafana对集群进行监控。
星哥玩云
2022/07/13
2.9K0
Kubernetes集群监控方案详解
部署 Prometheus 和 Grafana 到 k8s
上次我们主要分享了 asp.net core 集成 prometheus,以及简单的 prometheus 使用,在实际在 k8s 中部署的时候就不能在使用前面讲的静态配置的方式来部署了,需要使用 Prometheus 的服务发现。
huofo
2022/03/17
8460
部署 Prometheus 和 Grafana 到 k8s
使用 vmagent 代替 Prometheus 采集监控指标
vmagent 可以帮助我们从各种来源收集指标并将它们存储在 VM 或者任何其他支持 remote write 协议的 Prometheus 兼容的存储系统中。
我是阳明
2022/05/22
3.8K0
使用 vmagent 代替 Prometheus 采集监控指标
在 k8s(kubernetes)中使用 Loki 进行日志监控
在 k8s(kubernetes)中使用 Loki 进行日志监控 安装helm环境 [root@hello ~/yaml]# [root@hello ~/yaml]# curl https://baltocdn.com/helm/signing.asc | sudo apt-key add - [root@hello ~/yaml]# sudo apt-get install apt-transport-https --yes [root@hello ~/yaml]# echo "deb https:
小陈运维
2021/12/14
1.3K0
Kubernetes集群日志-使用Loki实现日志告警
对于生产环境以及一个有追求的运维人员来说,哪怕是毫秒级别的宕机也是不能容忍的。对基础设施及应用进行适当的日志记录和监控非常有助于解决问题,还可以帮助优化成本和资源,以及帮助检测以后可能会发生的一些问题。使用 Loki 收集日志是否可以根据采集的日志来进行报警呢?答案是肯定的,而且有两种方式可以来实现:Promtail 中的 metrics 阶段和 Loki 的 ruler 组件。
王先森sec
2023/12/21
1.3K1
Kubernetes集群日志-使用Loki实现日志告警
使用 VictoriaMetrics 监控 K8s 集群
过去几年,Kubernetes 已经成为容器编排的标准,越来越多的公司开始在生产系统使用 Kubernetes。通常我们使用 Prometheus 对 K8S 集群进行监控,但由于 Prometheus 自身单点的问题。不得不寻求一些联邦方案或者分布式高可用方案,社区热度比较高的项目有 Thanos,Cortex,VictoriaMetrics。本文就介绍使用 VictoriaMetrics 作为数据存储后端对 K8S 集群进行监控,k8s 部署不再具体描述。
米开朗基杨
2021/06/09
3.3K0
使用 VictoriaMetrics 监控 K8s 集群
kubernetes日志采集Loki(四)
在此示例中,首先定义了一个ConfigMap对象,其中包含了Promtail的配置信息。然后,创建了一个Deployment对象,用于部署Loki的日志收集器。在Deployment对象中,指定了Promtail的镜像以及容器的端口号。此外,还指定了一个名为loki-agent-config的ConfigMap,用于存储Promtail的配置文件。在容器中,使用/etc/promtail-local-config.yaml路径挂载此ConfigMap。
玖叁叁
2023/05/04
6120
Prometheus监控神器-Kubernetes篇(一)
本篇使用StorageClass来持久化数据,搭建Statefulset的Prometheus联邦集群,对于数据持久化,方案众多,如Thanos、M3DB、InfluxDB、VictorMetric等,根据自己的需求进行选择,后面会详细讲解针对数据持久化的具体细节。
Kubernetes技术栈
2020/09/09
2.1K0
Loki & Promtail 详解
Loki 是受 Prometheus 启发的水平可扩展、高可用、多租户日志聚合系统。非常适合采集 Kubernetes Pod 的日志,关键 Loki 还易于操作且更加轻量级(相比 ELK/EFK/EFLK )。
gopher云原生
2021/10/18
15.9K0
Kubernetes运维-使用Skywalking进行链路追踪
目前监控k8s集群指标是SkyWalking v9版本新特性,配置的时候网上一篇文章没有,搞了很久,记录一下,经验之谈就是多番找GitHub中 Issues 和阅读官方文档。
王先森sec
2024/01/25
1K0
Kubernetes运维-使用Skywalking进行链路追踪
使用 Loki 收集 Traefik 日志
前面我们介绍了 Loki 的实现架构以及 Promtail 的相关配置,本文我们将来介绍如何安装 Loki,并为 Traefik 的日志设置一个可视化的 Dashboard。
我是阳明
2021/05/17
1.6K0
使用 Loki 收集 Traefik 日志
使用loki和grafana展示ingress-nginx的日志
在kubernetes中,对于日志的收集,使用最多的是FEK, 不过有时候,FEK在架构上会略显重, ES的查询及全文检索功能其实使用的不是很多.LoKi做为日志架构的新面孔, 由grafana开源, 使用了与Prometheus同样的label理念, 同时摒弃了全文检索的能力, 因此比较轻便, 非常具有潜力。
没有故事的陈师傅
2021/01/04
2.5K0
使用loki和grafana展示ingress-nginx的日志
相关推荐
kubernetes | loki 开源日志框架
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验