当前位置:首页 > NFT交易平台 > Kubernetes下Stdout日志白名单最佳实践

Kubernetes下Stdout日志白名单最佳实践

影友中国3年前 (2022-07-24)NFT交易平台258

环境准备

已有Kubernetes环境(简称K8),本实践基于自建Kubernetesv1.23.1,观测云Datakit版本1.2.13,Nginx1.17imtoken。Datakit已经部署好,Datakit配置文件container.conf通过ConfigMap方式管理。

注:(阿里云容器服务(Alibaba Cloud Container Service for Kubernetes)或其他云服务商的Kubernetes配置原理类似imtoken。

前置条件

Nginx日志在K8环境中的输出为Stdout方式,而非文件方式imtoken。观测云Datakit以DaemonSet部署后,默认采集K8内部所有Stdout日志输出,包括集群内部组件的Stdout输出方式,如CoreDNS(需开启日志)。本文涉及的日志均为Stdout方式输出。

注:Stdout是开发工程师写代码时imtoken,选择日志控制台的输出方式,

如:<appender name="console" class="4b0f-499e-7dd9-6c6d ch.qos.logback.core.ConsoleAppender">

白名单需求

Datakit部署完成后,按需采集指定的业务Pod日志、K8集群组件的日志,后续新增的未指定的业务Pod日志不会采集,另外对同一个Pod里的多容器日志采集只采集其中一个或多个imtoken。

本文通过观测云采集器Datakit不同的日志过滤方法来实现,使用给日志加Annotation标注(包括过滤Pod内部其他容器产生的日志)和container.conf中的container_include_log = []组合来实现imtoken。

更详细日志处理原理见《Datakit日志处理综述》

展开全文

实现方式

方式一 使用container_include_log = []

只采集集群组件coredns和nginx日志,container_include_log用正则语法编写image的名称imtoken。

具体见《根据容器 image 配置指标和日志采集》

[inputs.container]

docker_endpoint = "unix:///var/run/docker.sock"

containerd_address = "/var/run/containerd/containerd.sock"

## Containers metrics to include and exclude, default not collect. Globs accepted.

container_include_metric = []

container_exclude_metric = ["image:*"]

## Containers logs to include and exclude, default collect all containers. Globs accepted.

container_include_log = ["image:*coredns*","image:*nginx*"]

container_exclude_log = []

exclude_pause_container = true

## Removes ANSI escape codes from text strings

logging_remove_ansi_escape_codes = false

## Maximum length of logging, default 32766 bytes.

max_logging_length = 32766

kubernetes_url = ""

## Authorization level:

## bearer_token -> bearer_token_string -> TLS

## Use bearer token for authorization. ('bearer_token' takes priority)

## linux at: /run/secrets/kubernetes.io/serviceaccount/token

## windows at: C:\var\run\secrets\kubernetes.io\serviceaccount\token

bearer_token = "/run/secrets/kubernetes.io/serviceaccount/token"

# bearer_token_string = "<your-token-string>"

[inputs.container.tags]

# some_tag = "some_value"

# more_tag = "some_other_value"

实现效果

这样就按需采集指定image名称的Pod日志imtoken,如下图:

方式二 组合container_include_log = []和Annotation标记

只采集集群组件coredns和nginx日志,同时通过Annotation对nginx标记,当然未在container_include_log中开启的白名单,比如:另外的镜像busybox,也可以通过Annotation方式标记后采集上来imtoken。这是由于Annotation标记的方式优先级高。

详细见日志处理原理《Datakit日志处理综述》

Nginx的Annotation标记

labels:

app: nginx-pod

annotations:

datakit/logs: |

"disable": false,

"source": "nginx-source",

"service": "nginx-source",

"pipeline": "",

"multiline_match": ""

spec:

采集器配置

[inputs.container]

docker_endpoint = "unix:///var/run/docker.sock"

containerd_address = "/var/run/containerd/containerd.sock"

## Containers metrics to include and exclude, default not collect. Globs accepted.

container_include_metric = []

container_exclude_metric = ["image:*"]

## Containers logs to include and exclude, default collect all containers. Globs accepted.

container_include_log = ["image:*coredns*","image:*nginx*"]

container_exclude_log = []

exclude_pause_container = true

## Removes ANSI escape codes from text strings

logging_remove_ansi_escape_codes = false

## Maximum length of logging, default 32766 bytes.

max_logging_length = 32766

kubernetes_url = ""

## Authorization level:

## bearer_token -> bearer_token_string -> TLS

## Use bearer token for authorization. ('bearer_token' takes priority)

## linux at: /run/secrets/kubernetes.io/serviceaccount/token

## windows at: C:\var\run\secrets\kubernetes.io\serviceaccount\token

bearer_token = "/run/secrets/kubernetes.io/serviceaccount/token"

# bearer_token_string = "<your-token-string>"

[inputs.container.tags]

# some_tag = "some_value"

# more_tag = "some_other_value"

实现效果

方式三 过滤Pod中的某容器日志

只采集集群组件coredns和nginx日志,同时通过Annotation对nginx标记里的"only_images" 字段开启只需要容器的image,也就是在Pod内部也有个白名单策略imtoken。

开启Pod内白名单前

如下图imtoken,nginx和busybox日志均采集

开启Pod内白名单

labels:

app: nginx-pod

annotations:

datakit/logs: |

"disable": false,

"source": "nginx-source",

"service": "nginx-source",

"pipeline": "",

"only_images": ["image:*nginx*"],

"multiline_match": ""

spec:

实现效果

仅保留Pod内Nginx日志

总结

其实不建议开启白名单策略,白名单可能会造成很多问题,且不好调试,白名单可能会有无法预期的效果,比如开发打个日志没看到,实际上是没加某个 Tagimtoken。要过滤日志来源,黑名单失效最差情况是数据采集上来,黑名单过滤比如在Datakit采集器container.conf中的

container_exclude_log = ["image:pubrepo.jiagouyun.com/datakit/logfwd*"]

方式一是没有使用Annotation标记,而是用采集器container.conf中内置的过滤方式,更偏向底层的方式实现imtoken。但是这种方式不如方式二,因为标记的方式可以对日志的来源做更好的Tag,未来分析问题,做筛选方便些,另外也更灵活点,标记是在业务Pod上,可以做到,同一批业务Image进行精细化的日志过滤管控。

方式三结合具体的业务场景,过滤掉一些不必要的Sidecar等日志,可以过滤掉不必要的日志,达到日志采集降噪的效果imtoken。

【 立即体验观测云 】

扫描二维码推送至手机访问。

版权声明:本文由影友中国发布,如需转载请注明出处。

本文链接:https://bhyywh.com/jy/1355.html

分享给朋友:

“Kubernetes下Stdout日志白名单最佳实践” 的相关文章

小丑提现以太坊 小丑区块链

小丑提现以太坊 小丑区块链

本篇文章给大家谈谈小丑提现以太坊,以及小丑区块链对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 IAC推出的区块链游戏“以太小丑”是什么? 1、以太小丑,CryptoClown是正经全名。做一个真正的区块链宠物养成游戏。2、以太小丑全名为Crypto Clown,是基于以太坊区块链开发的数字...

加密货币或成未来趋势?Arksen探险游艇接受加密货币支付

加密货币或成未来趋势?Arksen探险游艇接受加密货币支付

原创 IBI Daily News IBI国际游艇行业每日资讯 英国探险游艇品牌Arksen正在通过开发基于数字资产的担保项目来增加支付方式,接受所有主要的加密货币支付,以及标准游艇融资方案加密货币。 Arksen游艇品牌背后的理念是为那些渴望航行到地球上最偏远地带的新一代探险者设计船艇加密货币。该...

区块链技术在其它行业的应用场景

区块链技术在其它行业的应用场景

区块链的应用其实蛮多的,但很多的是长期布局,各自为战,并未起到1+1大于2的效果,未来整合各家区块链布局,共建不低于行业级别的是未来区块链发展方向区块链合约。北京木奇移动技术有限公司,专业的区块链开发公司,欢迎交流合作。下面简单地介绍些区块链应用和该应用面临的问题。 证券记账 美国occ期权清结算机...

比特币(BTC)价格是否有望突破24000美元?

比特币(BTC)价格是否有望突破24000美元?

比特币(BTC)价格在本周开始时成功飙升至 22,000 美元的心理水平之上,达到 22,795 美元的高位btc。最近的反弹使人们猜测比特币(BTC)可能已经触底。然而,灰度关于加密市场周期的最新报告显示,熊市可能还会持续 250 天。 Grayscale 的最新报告消除btc了比特币底部的猜测...

抵押率超130%,24小时可查,USDD做对了什么?

抵押率超130%,24小时可查,USDD做对了什么?

6月5日,根据Bloomberg、The Block等全球知名媒体报道,USDD正式升级为全球首个去中心化超抵押稳定币,以高于130%的抵押率居世界第一,并于USDD官网及波联储TRONDAO Resrve官网提供24小时质押率的实时公开查询usdt。 据了解,USDD由波场联合储备与区块链主流机构...

融创中国联合泰达股份成立天津泰融置地,注册资本1.7亿元

融创中国联合泰达股份成立天津泰融置地,注册资本1.7亿元

  乐居财经讯 孙肃博4月27日,融创房地产集团有限公司联合天津泰达集团有限公司成立天津泰融置地有限公司,投资比例分别为47.0588%及52.9412%泰达币。   据国家企业信用信息公示系统显示,天津泰融置地有限公司成立于2022年4月27日,法定代表人为姜国泉,注册资本为17000万元人民币,...