MySQL, Oracle, Linux, 软件架构及大数据技术知识分享平台

网站首页 > 精选文章 / 正文

生产环境部署Loki+grafana+promtail

2024-12-06 15:12 huorong 精选文章 5 ℃ 0 评论

Loki是一个水平可扩展,高可用性,支持多租户的日志聚合系统,使用了和 Prometheus 相同的服务发现机制,将标签添加到日志流中而不是构建全文索引,而是为每个日志流编制一组标签。

Grafana 是一个用于监控和可视化观测的开源平台,支持非常丰富的数据源,支持Prometheus 和 Loki 等数据源的时间序列数据。

Grafana和Loki的组合使得我们日志收集聚合简单高效,而且查看起来更接近在控制台实时查看日志。

Loki由3个组成部分组成:

  • loki 是主服务器,负责存储日志和处理查询。
  • promtail 是代理,发现采集目标以及给日志流添加上 Label 标签,然后发送给 Loki,也可以选择fluent-bit。
  • 用户界面的Grafana。

部署方式

由于我们服务有同时运行在k8s集群上和ECS服务器上,所以规划Loki server使用helm部署在k8s中,grafana也部署在k8s中,promtail部署在k8s和其他ECS服务器上以docker方式运行。

Loki和grafana通过ingress暴露服务。

1. 安装helm

wget https://get.helm.sh/helm-v3.3.4-linux-amd64.tar.gz
tar zxf helm-v3.3.4-linux-amd64.tar.gz
mv linux-amd64/helm /usr/bin/
helm version  # 查看helm 版本

添加Loki源

helm repo add loki https://grafana.github.io/loki/charts && helm repo update
helm search repo loki

2.创建PVC

为了使Loki数据持久化,k8s集群需要准备好StorageClass,这里使用了阿里云的Default StorageClass

执行以下命令将StorageClass (alicloud-disk-efficiency)配置为一个Default StorageClass。

kubectl patch storageclass alicloud-disk-efficiency -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
kubectl get sc


创建PVC

注,在阿里云k8s设置了Default StorageClass后可以不指定StorageClass,但其他情况需要指定

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: loki-server-pvc
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 100Gi


集群会自动创建一个云盘卷(PV),且配置了Default StorageClass(alicloud-disk-ssd)。

kubectl get pvc


3. 下载Loki并改造

helm fetch loki/loki

编辑 loki/value.yaml修改配置

14    enabled: true
19      - host: loki.k8s.example.com # 开启ingress, ingress域名
20        paths: ['/loki/api/v1/push']
72      ingestion_rate_mb: 32
121   enabled: true #开启持久化存储
129   existingClaim: loki-server-pvc # 为之前创建的PVC

左侧为value.yaml的行数

4. 安装Loki

helm install loki-server ./loki   # 指定release的名称


5.在k8s上安装promtail

安装日志采集端在k8s中

helm install promtail loki/promtail --set "loki.serviceName=loki-server"  # 要指定loki-server的名称

6. 安装grafana

grafana.yml如下

kind: Deployment
apiVersion: apps/v1beta2
metadata:
  labels:
    app: grafana
  name: grafana
spec:
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: grafana
  template:
    metadata:
      labels:
        app: grafana
    spec:
      securityContext:
        runAsUser: 0
      containers:
        - name: grafana
          image: grafana/grafana:latest
          imagePullPolicy: IfNotPresent
          env:
            - name: GF_AUTH_BASIC_ENABLED
              value: "true"
            - name: GF_AUTH_ANONYMOUS_ENABLED
              value: "false"
          readinessProbe:
            httpGet:
              path: /login
              port: 3000
          ports:
            - containerPort: 3000
              protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
  name: grafana-service
  labels:
    app: grafana
spec:
  ports:
    - port: 3000
      name: grafana
      targetPort: 3000
  selector:
    app: grafana
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: grafana-public-ingress
  #annotations:
  #  kubernetes.io/ingress.class: shujiajia-public-ingress
spec:
  rules:
  - host: grafana.k8s.example.com  # 注意修改为自己的域名
    http:
      paths:
      - backend:
          serviceName: grafana-service
          servicePort: 3000

登入 Grafana,添加 Loki 作为数据源,如:http://loki-server:3100。添加之后,就可以点击 Explore 按钮,然后根据label选择不同服务查看日志了。



7. 在其他服务器上安装promtail进行日志收集

安装日志采集端在服务器上-docker方式

配置文件如下:cat config.yml

server:

  http_listen_port: 0

  grpc_listen_port: 0

positions:

  filename: /etc/promtail/positions.yaml   # 游标记录上一次同步位置

  sync_period: 10s #10秒钟同步一次

clients:

  - url: http://loki.k8s.example.com/loki/api/v1/push  # 替换为自己的Loki server的地址,ingress暴露的地址

scrape_configs:

- job_name: gateway

  static_configs:

  - targets:

      - localhost

    labels:

      # 自定义标签

      app: gateway

      __path__: /data/logs/*/*.log   # 需要收集的日志目录,支持正则匹配

启动

docker run -d --name promtail \
    -v /data/apps/promtail:/etc/promtail \
    -v /data/logs:/data/logs \
    grafana/promtail

注意,由于是docker方式运行,所以需要把配置文件目录和服务运行的日志目录进行挂载,如果目录下有多个日志,比如error.log和log.log,Loki会对日志进行聚合显示。

8.升级/更新loki

helm upgrade --install loki-server ./loki


查看日志

Tags:grafana 安装

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言