filebeat往pulsar发送数据
1.github地址
https://github.com/streamnative/pulsar-beat-output
2.下载源码,本地编译
Dockerfile
# 原仓库地址的dockerfile里写的是golang:1.12.4,但这个版本好像有问题。readme里面写的是golang:1.17,故用这个版本 FROM golang:1.17 # Apache pulsar go client dependency package # 这几步如果网络不好会执行失败,多试几次即可 RUN wget https://archive.apache.org/dist/pulsar/pulsar-2.3.0/DEB/apache-pulsar-client.deb RUN wget https://archive.apache.org/dist/pulsar/pulsar-2.3.0/DEB/apache-pulsar-client-dev.deb RUN dpkg -i apache-pulsar-client.deb RUN dpkg -i apache-pulsar-client-dev.deb # 设置一个国内的代理 ENV GO111MODULE=on \ GOPROXY="https://goproxy.cn,direct" WORKDIR /apps/pulsar-beat-output COPY pulsar-beat-output /apps/pulsar-beat-output # 这里只编译filebeat to pulsar的 RUN go build -o filebeat /apps/pulsar-beat-output/filebeat/filebeat.go # 把编译好的二进制文件复制到test_module目录下,这里是因为看到github的readme写要./filebeat modules enable system,但我觉得可以不这么做,直接执行./filebeat -c filebeat.yml -e就行 RUN cp /apps/pulsar-beat-output/filebeat/filebeat /apps/pulsar-beat-output/test_module RUN cp /apps/pulsar-beat-output/filebeat.yml /apps/pulsar-beat-output/test_module # 这里其实用个其他比较小的基础镜像可能也可以(没测试过,如果用alpine基础镜像,会有动态库的问题),因为已经编译成可执行的二进制文件了,加上一个赋予可执行权限的命令即可(有go环境可以不赋这个权限),RUN chmod +x filebeat FROM golang:bullseye COPY --from=0 /apps/pulsar-beat-output /apps/pulsar-beat-output WORKDIR /apps/pulsar-beat-output/test_module CMD /bin/bash
3.运行
在/apps/pulsar-beat-output/test_module目录下执行
./filebeat -c filebeat.yml -e
4.k8s部署
apiVersion: v1
data:
filebeat.yml: |-
filebeat.inputs: # 具体配置规则看https://www.elastic.co/guide/en/beats/filebeat/current/index.html
- type: filestream
paths:
- /var/log/*.log
processors:
- include_fields:
fields: ["message"]
#output.console: #只是配置控制台输出的,可用来测试
# pretty: true
output.pulsar:
url: "pulsar://pulsar-broker.paas:6650" #pulsar地址
topic: persistent://filebeat/log
#name: log
kind: ConfigMap
metadata:
name: filebeat-config
namespace: paas
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: filebeat-ds
namespace: paas
spec:
selector:
matchLabels:
k8s-app: filebeat
template:
metadata:
labels:
k8s-app: filebeat
spec:
containers:
- args:
- ./filebeat
- -c
- /etc/filebeat.yml
- -e
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
image: filebeat-pulsar:0.4.1
imagePullPolicy: Always
name: filebeat-container
resources:
limits:
memory: 500Mi
requests:
cpu: 100m
memory: 100Mi
securityContext:
runAsUser: 0
volumeMounts:
- mountPath: /etc/filebeat.yml
name: filebeat-config
readOnly: true
subPath: filebeat.yml
- mountPath: /usr/share/filebeat/data
name: data
- mountPath: /var/log #把需要采集的目录挂载到容器里面
name: varlog
readOnly: true
dnsPolicy: ClusterFirstWithHostNet
hostNetwork: true
terminationGracePeriodSeconds: 30
volumes:
- configMap:
defaultMode: 416
name: filebeat-config
name: filebeat-config
- hostPath:
path: /var/log
name: varlog
- hostPath:
path: /var/lib/filebeat-data
type: DirectoryOrCreate
name: data

浙公网安备 33010602011771号