关注分享主机优惠活动
国内外VPS云服务器

k8s 和 log-- 使用 lua 将过滤器添加到 Fluent Bits

摘要:我最近遇到了一个奇怪的需求,需要我使用为满足该需求而编写的代码。 因此,找到官方代码存储库,下载它,并进行一些更改。 添加了以下新注释。 它相对容易使用。 当出现问题并且有不明白的地方时,需要付出很大的努力才能解决。 官方文档没有提供足够的细节,仅提供一般性解释。

简介

前面我们介绍了日志采集神器Fluent Bit。 最近遇到一个奇怪的需求,需要我用Lua写一个Fluent位过滤器来满足这个需求。

我先介绍一下需求。
非容器日志团队使用filebeat,配置文件部分如下:

处理器:- 剖析:分词器:“ /data/logs /%{appname}/%{filename}.log”字段:“source” target_prefix:“”

也就是说,我们需要从源字段中提取应用程序名和文件名字段。 日志记录。

Fluent bit没有这样的插件,所以你必须自己实现。

实现编写过滤器规范的官方Lua示例是:

function cb_print(tag, timestamp , record) 返回码,时间戳,记录结束

函数输入参数函数参数

名称

描述

标签

与传入记录关联的标签名称。

时间戳

与接收到的记录关联的 Unix 时间戳纳秒。 原始格式为double(秒.纳秒)

Record

包含记录Table内容的Lua

返回值

每个回调必须返回三个值:

名称

数据类型

描述

code

整数

代码返回结果和后续操作。 如果code等于-1,则意味着filter_lua应该删除该记录。 如果_代码_如果等于0,则不修改记录。 否则,如果code等于1,则原始时间戳或记录已被修改,应替换为timestamp的返回值。 >(第二个返回值)和记录(第三个返回值)。

时间戳

double

代码为 1 ,原始记录的时间戳将替换为这个新值。

">记录

表格

代码为1 ,原来的记录信息会被这个新值替换。注意这个值必须在一个有效的Lua表中。

理解上面的规范可以结合下面的描述:

代码实现。b>

创建一个实现类似功能的Lua文件:

functiondissect(tag, timestamp, record) source = record["source"] if (source == nil) then return 0, 0, 0 else new_record = record 本地结果 = { } local from = 1 本地 delim_from, delim_to = 字符列。    find(source, "/", from ) while delim_from do table.insert( result, string.sub(source, from , delim_from-1 ) ) from = delim_to + 1 delim_from, delim_to = string.find(source, " /", from ) end table.insert( result, string.sub( source, from ) ) new_record["appname"] = result[7] new_record["filename"] = string.sub( result[8], 1, -5 ) return 1, timestamp, new_record end end

注意

在k8s环境下,业务日志磁盘路径为:Masu。 格式如下:source=/data/logs/default/tomcat/742473c7-17dc-11e9-afc5-0a07a5c4fbe2/appname/filename.log

result[7]这种写法容易出现bug的原因是:因为我们这里有严格的日志规范。 此外,它只是提供了在 Lua 中创建过滤器的想法。

创建图像

我们基于 Fluent bit 1.0.2。 因此,找到官方代码存储库,git克隆它,并进行一些更改。
新的 dockerfile 是:

FROM debian:stretch as builder# Fluent Bit 版本ENV FLB_MAJOR 1ENV FLB_MINOR 0ENV FLB_PATCH 2ENV FLB_VERSION 1.0.2ENV DEBIAN_FRONTEND noninteractiveENV FLB_TARBALL http://github.com/ Fluent/ Fluent-bit/archive/v$ FLB_VERSION.zipRUN mkdir -p / Fluent-bit/bin / Fluent-bit/etc / Fluent-bit/log /tmp/ Fluent-bit -master/RUN apt-获取更新 && apt-get install -y --no-install-推荐 build-essential cmake make wget unzip libssl1.0 -dev libsasl-dev libsasl2-dev pkg-config libsystemd-dev zlib1g-dev ca-证书 && wget -O "/tmp/fluid-bit-${FLB_VERSION}.zip" $ {FLB_TARBALL} && cd /tmp && 解压 "fluid-bit-$FLB_VERSION.zip" && cd "fluid-bit-$FLB_VERSION"/build/ && rm -rf /tmp/ fluid -bit-$FLB_VERSION/build/*WORKDIR /tmp/ Fluent-bit-$FLB_VERSION/build/RUN cmake -DFLB_DEBUG=开 -DFLB_TRACE=关 -DFLB_JEMALLOC=开-DFLB_TLS=开 -DFLB_SHARED_LIB=关 -DFLB_EXAMPLES=关 -DFLB_HTTP_SERVER=开 -DFLB_IN_SYSTEMD=开 -DFLB_OUT_KAFKA=开 ..RUN make -j $(getconf _NPROCESSORS_ONLN) RUN install bin/ Fluent-bit / Fluent-bit/bin/# 复制配置文件 Fluent-bit.conf parsers.conf parsers_java.conf parsers_extra.conf parsers_openstack.conf parsers_cinder.conf plugins.conf /fluid-bit/etc/COPY dissect.lua /fluid-bit/bin/FROM gcr.io/distroless/ ccMAINTAINER Eduardo Silva 标签描述 =“Fluent Bit docker 映像”供应商 =“Fluent Organization”版本 =“1.1”COPY --from=builder /usr/lib/x86_64 -linux-gnu/*sasl* /usr/lib/x86_64-linux-gnu/COPY --from=builder /usr/lib/x86_64-linux- gnu/libz* /usr/lib/x86_64-linux-gnu/COPY --from=builder /lib/x86_64-linux-gnu/libz* /lib/x86_64[k4 ] ]linux-gnu/COPY --from=builder /usr/lib/x86_64-linux-gnu/libssl.so* /usr/lib/x86_64-linux- gnu /COPY --from=builder /usr/lib/x86_64-linux-gnu/libcrypto.so* /usr/lib/x86_64-linux-gnu/# systemdCOPY --from=builder /lib/x86_64- 需要以下所有内容linux -gnu/libsystemd* /lib/x86_64-linux-gnu/COPY --from=builder /lib/x86_64-linux-gnu/libselinux.so* /lib / x86_64-linux-gnu/COPY --from=builder /lib/x86_64-linux-gnu/liblzma.so* /lib/x86_64-linux-gnu / 复制 --from=builder /usr/lib/x86_64-linux-gnu/liblz4.so* /usr/lib/x86_64-linux-gnu/COPY -[ k4 ] ]from=builder /lib/x86_64-linux-gnu/libgcrypt.so* /lib/x86_64-linux-gnu/COPY --from=builder /lib/x86_64 [ k4] ]linux-gnu/libpcre.so* /lib/x86_64-linux-gnu/COPY --from=builder /lib/x86_64-linux-gnu/ libgpg - ]error.so* /lib/x86_64-linux-gnu/COPY --from=builder/fluid-bit /fluid-bit#EXPOSE 2020# 入口点 CMD ["/fluid-bit/bin/fluid-bit", "-c", "/fluid-请注意,已添加位 /etc/ Fluent-bit.conf"]

COPY dissect.lua / Fluent-bit/bin/ 。

剩下的就是构建图像了。

使用姿势

使用起来还是比较容易的。 这是演示:

 [FILTER] 名称 lua 匹配 app.* script / Fluent-bit/bin/dissect.lua 调用 dissect

script Lua 脚本。

call是一个lua函数名。

摘要

创建此过滤器给了我们一些见解。

官方镜像基于 Google 的 distroless 镜像。 没有 shell 或包管理,因此调试非常繁琐。 在正常的业务容器化场景下,这显然是不合适的,与阿里巴巴富容器的理念完全不同。 当然,除非公司的业务拓展能力足够强。

还有一点与Fluent Bit相关的信息。 当出现问题并且有不明白的地方时,需要付出很大的努力才能解决。 除非你是C专家。 官方文档没有提供足够的细节,仅提供一般性解释。

未经允许不得转载:主机频道 » k8s 和 log-- 使用 lua 将过滤器添加到 Fluent Bits

评论 抢沙发

评论前必须登录!

 

本站不销售/不代购主机产品,不提供技术支持,仅出于个人爱好分享优惠信息,请遵纪守法文明上网

Copyright © 主机频道 - ZHUJIPINDAO.COM ,本站托管于国外主机商

© 2021-2024   主机频道   网站地图 琼ICP备2022006744号