惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

小众软件
小众软件
C
Check Point Blog
Vercel News
Vercel News
Y
Y Combinator Blog
G
Google Developers Blog
P
Proofpoint News Feed
WordPress大学
WordPress大学
MongoDB | Blog
MongoDB | Blog
博客园 - 司徒正美
Last Week in AI
Last Week in AI
博客园 - 【当耐特】
N
Netflix TechBlog - Medium
L
LangChain Blog
V
V2EX
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
大猫的无限游戏
大猫的无限游戏
D
DataBreaches.Net
博客园_首页
B
Blog RSS Feed
The Cloudflare Blog
MyScale Blog
MyScale Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Microsoft Security Blog
Microsoft Security Blog

i4T

OpenClaw在Macmini下网络HTTPS_Proxy代理配置 | i4T 容器化部署OpenClaw授权View权限对Kubernetes集群进行巡检故障排查 | i4T Kubernetes 部署Elasticsearch为WordPress提供文章搜索 | i4T Kubernetes使用Prometheus监控爱快路由器iKuai_Exporter | i4T RustDesk API集成Authentik ODIC单点登录 | i4T Kubernetes 部署RustDesk API实现专业版功能及管理Web UI | i4T 使用Kubernetes 快速部署RustDesk替换向日葵toDesk进行远程连接 | i4T Authentik 集成群晖Synology DSM 实现单点登录 | i4T Authentik 集成Kubernetes Grafana 实现SSO单点登录 | i4T Authentik 集成接入VMware vCenter 8.0.3实现ldP身份提供商登录 | i4T Kubernetes v1.29.9部署Authentik 统一认证平台并接入Harbor | i4T 二进制Kafka_2.13-3.9.0集群开启并配置ACL用户授权 | i4T R730 ESXI 8.0平台PCI直通2080Ti 实现Windows远程游戏以及AI模型 | i4T Dell R730虚拟化ESXI8.0.3平台使用丽台Tesla V100配置vGPU | i4T Kubernetes使用HostAliases手动为容器Pod添加hosts解析 | i4T Nginx 使用resolver变量实现动态DNS解析配置 | i4T Kubernetes LoadBalancer负载均衡外部访问方案MetalLB | i4T Kubernetes 1.29.0 部署配置Ingress-nginx-controller | i4T Ubuntu环境下Docker Compose配置Harbor开机自启 | i4T Dell PowerEdge R730更新iDRAC8版本 | i4T Kubernetes部署RedisShake实现Redis哨兵异地灾备 | i4T Kubernetes部署开源Excalidraw实现在线绘图 | i4T Kubernetes部署DNSmgr聚合公网DNS多平台域名解析系统及SSL自续签 | i4T Kubernetes Grafana数据从Sqlite3迁移到MySQL | i4T 宝塔内网Nginx获取公网宝塔Nginx用户真实IP | i4T 基于Kubernetes Categraf SNMP插件采集Dell R730服务器硬件并使用Grafana监控 | i4T Kubernetes v1.29.9安装Grafana 12并开启匿名访问 | i4T Containerd 配置免费镜像加速源 | i4T Docker集成Containerd实现容器管理 | i4T
初试VictoriaLogs集群采集Kubernetes Pod日志 | i4T
https://i4t.com/users/auuAwtzuk · 2026-01-18 · via i4T

VictoriaLogs 是 VictoriaMetrics 团队推出的开源日志解决方案,旨在替代笨重的 Elasticsearch (ELK) 和架构复杂的 Loki

组件介绍

  • vlinsert 接收来自 Fluent-bit、Vector 或 Logstash 的日志数据
  • vlstorage 核心存储,将日志压缩并持久化到磁盘,响应查询请求。
  • vlselect 查询网关,处理Grafana或CLI的搜索请求。
  • vmauth 认证网关 - 可选,提供统一入口、负载均衡和身份验证。

Helm部署VictoriaLogs Cluster

这里使用从 Kubernetes 中运行的所有容器收集日志,并将数据发送到已安装的集群版 VictoriaLogs。

vlstorage部署了两个实例,每个实例的保留期为180天,PVC 为200Gi。

首先添加helm仓库

helm repo add vm https://victoriametrics.github.io/helm-charts/
helm repo update

使用环境变量的方式,helm VictoriaLogs部署节点

export RETENTION=180d
export PVC_SIZE=200Gi
export VLSTORAGE_REPLICAS=2
export NAMESPACE=tools

# Install victoria-logs-cluster chart
helm install vlc vm/victoria-logs-cluster --namespace $NAMESPACE --wait \
    --set "vlstorage.retentionPeriod=$RETENTION" --set "vlstorage.persistentVolume.size=$PVC_SIZE" \
    --set vmauth.enabled=true \
    --set vlstorage.replicaCount=$VLSTORAGE_REPLICAS

# Install victoria-logs-collector chart
helm install collector vm/victoria-logs-collector --namespace $NAMESPACE \
    --set "remoteWrite[0].url=http://vlc-victoria-logs-cluster-vmauth:8427"

离线本地下载

export RETENTION=180d
export PVC_SIZE=200Gi
export VLSTORAGE_REPLICAS=2
export NAMESPACE=tools

# 基于本地tgz包安装
helm install vlc ./victoria-logs-cluster-0.0.20.tgz \
  --namespace $NAMESPACE --wait \
  --set "vlstorage.retentionPeriod=$RETENTION" \
  --set "vlstorage.persistentVolume.size=$PVC_SIZE" \
  --set vmauth.enabled=true \
  --set vlstorage.replicaCount=$VLSTORAGE_REPLICAS

# 或基于解压后的目录安装(适合本地修改配置后)
helm install vlc ./victoria-logs-cluster \
  --namespace $NAMESPACE --wait \
  --set "vlstorage.retentionPeriod=$RETENTION" \
  --set "vlstorage.persistentVolume.size=$PVC_SIZE" \
  --set vmauth.enabled=true \
  --set vlstorage.replicaCount=$VLSTORAGE_REPLICAS

如需镜像加速,可使用abcdocker提供镜像加速文档 https://i4t.com/dockerproxy

修改服务暴露,如果没有ingress,可以和我一样修改SVC类型

#修改写的映射
root@k8s-master-01:~# kubectl edit svc  -n tools vlc-victoria-logs-cluster-vlinsert
  type: NodePort
#修改读的映射
root@k8s-master-01:~# kubectl edit svc -n tools vlc-victoria-logs-cluster-vlselect
  type: NodePort

最终效果

root@k8s-master-01:~# kubectl get svc -n tools|grep vlc
vlc-victoria-logs-cluster-vlinsert    NodePort    10.96.3.162   <none>        9481:31072/TCP                                                                                                    29d
vlc-victoria-logs-cluster-vlselect    NodePort    10.96.1.97    <none>        9471:31708/TCP                                                                                                    29d
vlc-victoria-logs-cluster-vlstorage   ClusterIP   None          <none>        9491/TCP                                                                                                          29d
vlc-victoria-logs-cluster-vmauth      ClusterIP   10.96.0.80    <none>        8427/TCP                                                                                                          29d

Grafana 安装插件

首先在Grafana中需要安装victoriametrics-logs-datasource插件

grafana cli plugins install victoriametrics-logs-datasource

初试VictoriaLogs集群采集Kubernetes Pod日志

fluent-bit 采集Kubernetes日志

创建ConfigMap

  • tools 部署命名空间
  • 采集Pod日志/var/log/containers/*.log路径
  • 写入日志地址 vlc-victoria-logs-cluster-vlinsert
  • 写入日志端口9481
apiVersion: v1
kind: ConfigMap
metadata:
  name: fluent-bit-config
  namespace: tools
  labels:
    app.kubernetes.io/name: fluent-bit
data:
  fluent-bit.conf: |
    [SERVICE]
        Flush        1
        Log_Level    info
        HTTP_Server  On
        HTTP_Listen  0.0.0.0
        HTTP_Port    2020
        Health_Check On

    [INPUT]
        Name            tail
        Tag             kubernetes.*
        Path            /var/log/containers/*.log
        # --- 关键修改在这里 ---
        Exclude_Path    /var/log/containers/fluent-bit-*.log
        Parser          cri
        DB              /var/log/flb_kube.db
        Mem_Buf_Limit   5MB
        Skip_Long_Lines On
        Refresh_Interval 10

    [FILTER]
        Name            kubernetes
        Match           kubernetes.*
        Kube_URL        https://kubernetes.default.svc:443
        Kube_CA_File    /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        Kube_Token_File /var/run/secrets/kubernetes.io/serviceaccount/token
        Kube_Tag_Prefix kubernetes.var.log.containers.
        Merge_Log       On
        Merge_Log_Key   log_processed
        K8S-Logging.Parser On
        K8S-Logging.Exclude Off

    [OUTPUT]
        Name            http
        Match           *
        Host            vlc-victoria-logs-cluster-vlinsert
        Port            9481
        URI             /insert/jsonline?_msg_field=log&_stream_fields=kubernetes.namespace_name,kubernetes.pod_name,kubernetes.container_name,stream&_time_field=time
        Format          json_lines
        Json_date_key   time
        Json_date_format iso8601
        Header          X-Scope-OrgID 1
        tls             Off
        tls.verify      Off

  parsers.conf: |
    [PARSER]
        Name   cri
        Format regex
        Regex  ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<message>.*)$
        Time_Key    time

创建rbac.yaml文件

apiVersion: v1
kind: ServiceAccount
metadata:
  name: fluent-bit
  namespace: tools # 建议使用独立的命名空间,如 logging
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: fluent-bit-read
rules:
- apiGroups: [""]
  resources:
  - namespaces
  - pods
  - pods/logs
  verbs: ["get", "list", "watch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: fluent-bit-read
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: fluent-bit-read
subjects:
- kind: ServiceAccount
  name: fluent-bit
  namespace: tools

创建DaemonSet.yaml Pod

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluent-bit
  namespace: tools
  labels:
    app.kubernetes.io/name: fluent-bit
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: fluent-bit
  template:
    metadata:
      labels:
        app.kubernetes.io/name: fluent-bit
    spec:
      containers:
      - name: fluent-bit
        image: harbor.frps.cn/tools/fluent-bit:3.0.1
        imagePullPolicy: Always
        ports:
        - containerPort: 2020
        env:
        - name: FLB_PROCESSOR
          value: "OFF"
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
        - name: fluent-bit-config
          mountPath: /fluent-bit/etc/
        - name: etcmachineid
          mountPath: /etc/machine-id
          readOnly: true
        resources:
          limits:
            memory: 100Mi
          requests:
            cpu: 10m
            memory: 20Mi
        securityContext:
          runAsUser: 0
          privileged: true
      serviceAccountName: fluent-bit
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers
      - name: fluent-bit-config
        configMap:
          name: fluent-bit-config
      - name: etcmachineid
        hostPath:
          path: /etc/machine-id
          type: File
      tolerations:
      - key: node-role.kubernetes.io/master
        operator: Exists
        effect: NoSchedule
      - key: node-role.kubernetes.io/control-plane
        operator: Exists
        effect: NoSchedule

部署完毕后,可以看到服务状态

root@k8s-master-01:~# kubectl get pod -n tools |grep fl
fluent-bit-d9ls4                                      1/1     Running   9 (4d21h ago)     16d
fluent-bit-dmr86                                      1/1     Running   3 (4d20h ago)     9d
fluent-bit-jhs7d                                      1/1     Running   7 (4d21h ago)     14d
fluent-bit-krkh4                                      1/1     Running   9 (4d21h ago)     14d
fluent-bit-t4znj                                      1/1     Running   6 (4d21h ago)     13d
fluent-bit-x9j5c                                      1/1     Running   7 (4d21h ago)     13d

现在我们访问页面就可以看到效果

node_ip:port

图形化访问的是vlselect

vlc-victoria-logs-cluster-vlselect    NodePort    10.96.1.97    <none>        9471:31708/TCP

初试VictoriaLogs集群采集Kubernetes Pod日志
初试VictoriaLogs集群采集Kubernetes Pod日志

Grafana 配置 victoriametrics-logs-datasource 数据源

Home -->Connections --> Add new connection --> VictoriaLogs -->Add new data source

初试VictoriaLogs集群采集Kubernetes Pod日志

vlc-victoria-logs-cluster-vlselect    NodePort    10.96.1.97    <none>        9471:31708/TCP

初试VictoriaLogs集群采集Kubernetes Pod日志

保存测试连接
初试VictoriaLogs集群采集Kubernetes Pod日志

默认Grafana没有提供好的模板选择,需要我们自行导入,这里我让Gemini Pro写了个一个简单的查看日志模板,可以直接导入
初试VictoriaLogs集群采集Kubernetes Pod日志

导入下方JSON

下载地址https://d.frps.cn/file/tools/grafana/VictoriaLogs-Dashboard.json
打开JSON文件复制上即可

初试VictoriaLogs集群采集Kubernetes Pod日志

数据源这块别选择❎

初试VictoriaLogs集群采集Kubernetes Pod日志

最后模板就可以看到日志

  • Namespace: 默认 .* (所有)。想看 tools 就直接输 tools。
  • Pod: 默认 .* (所有)。想看 blackbox 就直接输 blackbox。
  • Search: 默认 * (所有)。想搜错误就输 error 或 exception。
  • 时间:默认设为了 Last 15 minutes,这是看实时日志最舒服的范围。

初试VictoriaLogs集群采集Kubernetes Pod日志

个人中心

购物车

优惠劵

今日签到

有新私信 私信列表

搜索

幸运之星正在降临...

点击领取今天的签到奖励!

恭喜!您今天获得了{{mission.data.mission.credit}}积分

  • 限制以下商品使用: 限制以下商品分类使用: 不限制使用:

    所有商品和商品类型均可使用