容器技术
ubuntu使用APT安装docker并指定版本
Helm部署与使用
Helm常用命令
从Helm仓库创建应用流程示例
Helm部署与使用
K8S中部署mysql-ha高可用集群
helm启动mysql-ha
helm几个常用仓库
Kubernetes使用helm部署Mysql-Ha
k8s入门:Helm 构建 MySQL
docker批量修改tag(批量push)
k8s之yaml文件详解
将 MySQL 通过 bitpoke/mysql-operator 部署到 k8s 内部
k8s pvc扩容:pvc创建后扩容
K8S性能分析
部署Metrics Server
Kubernetes集群搭建
kubespray 部署常见问题和优化汇总
kubernetes-sigs/kubespray at release-2.15
K8S-pod配置文件详解
KubeSphere知识库
在 Kubernetes 上最小化安装 KubeSphere
卸载 KubeSphere 和 Kubernetes
KubeSphere 应用商店
修改pod中容器的时区
k8s之Pod安全策略
Harbor 登陆失败,用户名或者密码不正确。405 Not Allowed
Docker-leanote_n1
kubesphere/kubekey
Kubernetes Static Pod (静态Pod)
kubernets kube-proxy的代理 iptables和ipvs - 30岁再次出发 - 博客园
k8s生产实践之获取客户端真实IP - SSgeek - 博客园
kube-proxy ip-tables故障解决
k8s入门:Helm 构建 MySQL
docker批量修改tag(批量push)
prometheus operator 监控redis-exporter
Helm3 安装 ElasticSearch & Kibana 7.x 版本
kubernete强力删除namespace_redis删除namespace命令
EFK (Elasticsearch + Fluentd + Kibana) 日志分析系统
k8s日志收集实战(无坑)
fluentd收集k8s集群pod日志
Elasticsearch+Fluentd+Kibana 日志收集系统的搭建
TKE/EKS之configmap,secret只读挂载
K8s基于Reloader的ConfigMap/Secret热更新
使用 Reloader 实现热部署_k8s reloader
k8s使用Reloader实现更新configmap后自动重启pod
在 Kubernetes 上对 gRPC 服务器进行健康检查 | Kubernetes
Kubernetes ( k8s ) gRPC服务 健康检查 ( livenessProbe ) 与 就绪检查 ( readinessProbe )
排查kubernetes中高磁盘占用pod
helm 安装 MongoDB 集群
helm 安装 Redis 1 主 2 从 3哨兵
【k8s】使用 Reloader 实现热部署
k8s证书过期,更新后kubelet启动失败
kubeadm证书/etcd证书过期处理
三种监控 Kubernetes 集群证书过期方案
K8s 集群(kubeadm) CA 证书过期解决方案
k8s调度、污点、容忍、不可调度、排水、数据卷挂载
5分钟搞懂K8S的污点和容忍度(理论+实战)
Kubernetes进阶-8基于Istio实现微服务治理
macvlan案例配置
快速解决Dockerhub镜像站无法访问问题
info_scan开源漏洞扫描主系统部署
本文档使用 MrDoc 发布
-
+
首页
fluentd收集k8s集群pod日志
方案: 使用fluentd部署在每个node节点上,通过配置node节点的标签可选择daemonset-fluentd部署在选定的node节点上 通过在每个pod打上logging:true标签,结合fluentd的containers.input.conf可以有选择的匹配想要过滤的pod日志,从而可以过滤proxy,flannel容器的日志 参考: https://blog.51cto.com/xiaorenwutest/2500036 fluentd的comfigmap: kind: ConfigMap apiVersion: v1 metadata: name: fluentd-config namespace: logging data: system.conf: |- <system> root\_dir /tmp/fluentd-buffers/ </system> containers.input.conf: |- # 日志源配置 <source> @id fluentd-containers.log # 日志源唯一标识符,后面可以使用该标识符进一步处理 @type tail # Fluentd 内置的输入方式,其原理是不停地从源文件中获取新的日志。 path /var/log/containers/\*.log # 挂载的服务器Docker容器日志地址 pos\_file /var/log/es-containers.log.pos # 检查点 Fluentd重启后会从该文件中的位置恢复日志采集 tag raw.kubernetes.\* # 设置日志标签 read\_from\_head true <parse> # 多行格式化成JSON @type multi\_format # 使用 multi-format-parser 解析器插件 <pattern> format json # JSON解析器 time\_key time # 指定事件时间的时间字段 time\_format %Y-%m-%dT%H:%M:%S.%NZ # 时间格式 </pattern> <pattern> format /^(?<time>.+) (?<stream>stdout|stderr) \[^ \]\* (?<log>.\*)$/ time\_format %Y-%m-%dT%H:%M:%S.%N%:z </pattern> </parse> </source> <match raw.kubernetes.\*\*> # 匹配tag为raw.kubernetes.\*\*日志信息 @id raw.kubernetes @type detect\_exceptions # 使用detect-exceptions插件处理异常栈信息 remove\_tag\_prefix raw # 移除 raw 前缀 message log stream stream multiline\_flush\_interval 5 max\_bytes 500000 max\_lines 1000 </match> <filter kubernetes.\*\*> # 添加 Kubernetes metadata 数据 @id filter\_kubernetes\_metadata @type kubernetes\_metadata </filter> <filter kubernetes.\*\*> # 修复ES中的JSON字段 @id filter\_parser @type parser # multi-format-parser多格式解析器插件 key\_name log # 在要解析的记录中指定字段名称。 reserve\_data true # 在解析结果中保留原始键值对。 remove\_key\_name\_field true # key\_name 解析成功后删除字段。 <parse> @type multi\_format <pattern> format json </pattern> <pattern> format none </pattern> </parse> </filter> <filter kubernetes.\*\*> # 删除一些多余的属性 @type record\_transformer remove\_keys $.docker.container\_id,$.kubernetes.container\_image\_id,$.kubernetes.pod\_id,$.kubernetes.namespace\_id,$.kubernetes.master\_url,$.kubernetes.labels.pod-template-hash </filter> <filter kubernetes.\*\*> # 只采集具有logging=true标签的Pod日志 @id filter\_log @type grep <regexp> key $.kubernetes.labels.logging pattern ^true$ </regexp> </filter> forward.input.conf: |- # 监听配置,一般用于日志聚合用 <source> @id forward @type forward </source> output.conf: |- # 路由配置,将处理后的日志数据发送到ES <match \*\*> # 标识一个目标标签,后面是一个匹配日志源的正则表达式,我们这里想要捕获所有的日志并将它们发送给 Elasticsearch,所以需要配置成\*\* @id elasticsearch # 目标的一个唯一标识符 @type elasticsearch # 支持的输出插件标识符,输出到 Elasticsearch @log\_level info # 指定要捕获的日志级别,我们这里配置成 info,表示任何该级别或者该级别以上(INFO、WARNING、ERROR)的日志都将被路由到 Elsasticsearch。 include\_tag\_key true host elasticsearch # 定义 Elasticsearch 的地址 port 9200 logstash\_format true # Fluentd 将会以 logstash 格式来转发结构化的日志数据 logstash\_prefix k8s # 设置 index 前缀为 k8s request\_timeout 30s <buffer> # Fluentd 允许在目标不可用时进行缓存 @type file path /var/log/fluentd-buffers/kubernetes.system.buffer flush\_mode interval retry\_type exponential\_backoff flush\_thread\_count 2 flush\_interval 5s retry\_forever retry\_max\_interval 30 chunk\_limit\_size 2M queue\_limit\_length 8 overflow\_action block </buffer> </match> fluentd的dameonset apiVersion: v1 kind: ServiceAccount metadata: name: fluentd-es namespace: logging labels: k8s-app: fluentd-es kubernetes.io/cluster-service: "true" addonmanager.kubernetes.io/mode: Reconcile --- kind: ClusterRole apiVersion: rbac.authorization.k8s.io/v1 metadata: name: fluentd-es labels: k8s-app: fluentd-es kubernetes.io/cluster-service: "true" addonmanager.kubernetes.io/mode: Reconcile rules: - apiGroups: - "" resources: - "namespaces" - "pods" verbs: - "get" - "watch" - "list" --- kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: fluentd-es labels: k8s-app: fluentd-es kubernetes.io/cluster-service: "true" addonmanager.kubernetes.io/mode: Reconcile subjects: - kind: ServiceAccount name: fluentd-es namespace: logging apiGroup: "" roleRef: kind: ClusterRole name: fluentd-es apiGroup: "" --- apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd-es namespace: logging labels: k8s-app: fluentd-es version: v2.0.4 kubernetes.io/cluster-service: "true" addonmanager.kubernetes.io/mode: Reconcile spec: selector: matchLabels: k8s-app: fluentd-es version: v2.0.4 template: metadata: labels: k8s-app: fluentd-es kubernetes.io/cluster-service: "true" version: v2.0.4 annotations: scheduler.alpha.kubernetes.io/critical-pod: '' spec: serviceAccountName: fluentd-es containers: - name: fluentd-es image: cnych/fluentd-elasticsearch:v2.0.4 env: - name: FLUENTD\_ARGS value: --no-supervisor -q resources: limits: memory: 500Mi requests: cpu: 100m memory: 200Mi volumeMounts: - name: varlog mountPath: /var/log - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true - name: config-volume mountPath: /etc/fluent/config.d nodeSelector: #节点选择 beta.kubernetes.io/fluentd-ds-ready: "true" #节点需有这个标签才会部署收集 tolerations: #添加容忍 - key: node-role.kubernetes.io/master operator: Exists effect: NoSchedule terminationGracePeriodSeconds: 30 volumes: - name: varlog hostPath: path: /var/log - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers - name: config-volume configMap: name: fluentd-config
adouk
2023年4月20日 14:39
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码