">记录
表格
代码为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专家。 官方文档没有提供足够的细节,仅提供一般性解释。
评论前必须登录!
注册