当前位置: 首页 > article >正文

grafana全家桶-loki promtail收集k8s容器日志

loki是grafana旗下轻量级日志收集工具,为了减少loki对集群的影响,把loki的agent日志收集端promtail部署在k8s集群中,loki server部署在集群外面。这样简单做一个解耦,避免大量读写的应用影响到集群内业务服务。

一、promtail部署

helm配置文件,这里简单说一下promtail会自动从每台k8s node的容器目录去收集日志,默认是按照deployment的name进行拆分job,例如dp的名称是test和baga,job就会是test和baga
这里url写集群外的loki地址就行

cat >vaules.yaml<<EOF
config:
  clients:
    - url: http://172.28.199.199:3100/loki/api/v1/push

resources:
  limits:
    cpu: 300m
    memory: 300Mi
  requests:
    cpu: 100m
    memory: 100Mi


tolerations:
  - effect: NoSchedule
    key: node-role.kubernetes.io/master
EOF

安装promtail

kubectl create namespace logging
helm upgrade --install promtail grafana/promtail -f values.yaml --namespace logging

二、安装配置loki

2.1、docker-compose文件

cat >docker-compose.yaml <<EOF
version: '3'

services:
  loki:
    image: grafana/loki:latest
    ports:
      - "3100:3100"
      - "9095:9095"
    volumes:
      - ./loki-data:/loki
      - ./loki-config.yaml:/etc/loki/local-config.yaml
    user: root
    command: ["-config.file=/etc/loki/local-config.yaml"]
EOF

2.2、loki-config文件

cat >loki-config.yaml <<EOF
server:
  http_listen_port: 3100

common:                             #通用配置
  path_prefix: /loki
  storage:
    filesystem:
      chunks_directory: /loki/chunks
      rules_directory: /loki/rules
  replication_factor: 1
  ring:
    kvstore:
      store: inmemory

schema_config:
  configs:
    - from: 2020-10-24               # 架构配置的生效日期
      store: boltdb-shipper          # 存储类型
      object_store: filesystem       # 对象存储类型为文件系统
      schema: v11                    # 架构版本
      index:                         # 索引配置
        prefix: index_               # 索引前缀
        period: 24h                  # 索引周期

storage_config:                                                # 存储相关
  boltdb_shipper:
    active_index_directory: /loki/boltdb-shipper-active        # 活动索引的目录
    cache_location: /loki/boltdb-shipper-cache                 # 缓存位置
    cache_ttl: 24h                                             # 缓存的过期时间
    shared_store: filesystem                                   # 共享存储类型为文件系统
  filesystem:
    directory: /loki/chunks                                    # 文件系统的目录

compactor:
  working_directory: /loki/boltdb-shipper-compactor            # 紧缩器的工作目录
  shared_store: filesystem                                     # 共享存储类型为文件系统

limits_config:
  reject_old_samples: true               # 是否拒绝旧样本
  reject_old_samples_max_age: 72h        # 72小时之前的样本被拒绝
  max_entries_limit_per_query: 9999      # 数值改为自己想要的最大查询行数
  ingestion_rate_mb: 32                  # mb单位,每个用户每秒的采样率限制  不设置客户端会报错
  ingestion_burst_size_mb: 64            # 每个用户允许的采样突发大小

chunk_store_config:
  max_look_back_period: 72h              # 为避免查询超过保留期的数据,必须小于或等于下方的时间值

table_manager:
  retention_deletes_enabled: true        # 保留删除开启
  retention_period: 72h                  # 超过72h的块数据将被删除
auth_enabled: false
EOF

经过三天后发现数据保留72h是有效的

2.3、启动loki server

$ docker-compose up -d
# 这里的loki-data目录是loki的data目录,映射出来了   ./loki-data:/loki
root@ip-172-28-199-199:/data/loki# ls
docker-compose.yaml  loki-config.yaml  loki-data

2.4、写入测试数据

在没有grafana时测试loki可用性

curl -X POST http://172.28.199.199:3100/loki/api/v1/push -H "Content-Type: application/json" -d '{
  "streams": [
    {
      "stream": {
        "job": "test-job",
        "host": "example"
      },
      "values": [
        [ "'$(date +%s%N)'", "Hello Loki from test-job" ]
      ]
    }
  ]
}'

2.5、查看loki的job信息

$ curl "http://172.28.199.199:3100/loki/api/v1/label/job/values"
{"status":"success","data":["logging/promtail","sijia-test/vault-demo","test-job","vault/vault","vault/vault-agent-injector","velero/velero"]}

三、部署grafana

loki的ui就是grafana

3.1、docker-compose文件

直接把ldap也配置了

version: '3.7'

services:
  grafana:
    image: grafana/grafana:latest
    container_name: "grafana"
    ports:
      - "3000:3000"
    restart: always
    volumes:
      - "./grafana_data:/var/lib/grafana"
      - "./ldap.toml:/etc/grafana/ldap.toml"
    environment:
      - GF_AUTH_LDAP_ENABLED=true
      - GF_AUTH_LDAP_CONFIG_FILE=/etc/grafana/ldap.toml

3.2、ldap配置

ldap.toml,这是测试环境,所以用户权限都给Admin了

[[servers]]
# LDAP 服务器的地址和端口
host = "172.28.224.89"
port = 389
use_ssl = false
start_tls = false
ssl_skip_verify = false

# 用于绑定 LDAP 服务器的用户凭证
bind_dn = "cn=admin,dc=xx,dc=com"
bind_password = 'xx.compassword'

# 搜索过滤器和基础 DN,用于查找用户
search_filter = "(uid=%s)"
search_base_dns = ["dc=xx,dc=com"]

# LDAP 属性映射
[servers.attributes]
name = "uid"
surname = "sn"
username = "cn"
member_of = "dn"
email = "email"

# 组映射,所有用户默认分配 Admin 角色
[[servers.group_mappings]]
group_dn = "*"
org_role = "Admin"

查看ldap验证信息

docker logs grafana  -f | grep ldap

3.3、在grafana中查询

通过Explore查询
在这里插入图片描述

3.4、通过模板查询

我当前用了dash_id 13639,每个服务都对应一个App
在这里插入图片描述


http://www.kler.cn/a/331573.html

相关文章:

  • 在ESP32使用AT指令集与服务器进行TCP/IP通信时,<link ID> 解释
  • SSM 与 Vue 共筑电脑测评系统:精准洞察电脑世界
  • Javascript-web API-day02
  • 如何构建一个可信的联邦RAG系统。
  • 使用k6进行kafka负载测试
  • gbase8s之常用sql脚本
  • TCP、UDP
  • Java 异常一口气讲完!(_ _)。゜zzZ
  • 【SQLite】基础操作
  • 【快速删除 node_modules 】rimraf
  • 深入理解回调函数:指针世界的终极挑战(完)
  • CSS内边距
  • ES索引备份
  • 关于建表字段是否该使用 `NOT NULL` 的问题,你怎么看?
  • ubuntu命令行连接wifi
  • Hive数仓操作(十二)
  • C++ 语言特性13 - 强枚举类型
  • IP 数据包分包组包
  • mit6824-01-MapReduce详解
  • 解决 TypeError: Expected state_dict to be dict-like, got <class ‘*‘>.
  • 在 Ubuntu 下通过 Docker 部署 NAS 服务器
  • 损失函数篇 | YOLOv5 引入Unified-IoU 高质量目标检测IoU损失
  • Vue3项目开发——新闻发布管理系统(九)(完结篇)
  • 项目-坦克大战学习-资源冲突解决
  • 算法 | 鹈鹕算法POA-Transformer-LSTM多变量回归预测
  • redis 5的安装及启动(window)