Kubernetes环境中,使用Logstash同步Kafka消息至ES
摘要本文主要记录内容:Logstash 安装使用(配合Kafka同步数据至ES)使用Docker生成Logstash镜像Kubernets 集群环境中运行 Logstash1. Logstash 安装与使用Logstash 版本地址:https://www.elastic.co/guide/en/logstash/7.6/releasenotes.html截止2020-05-25,最新版本为7.6
摘要
本文主要记录内容:
- Logstash 安装使用(配合Kafka同步数据至ES)
- 使用Docker生成Logstash镜像
- Kubernets 集群环境中运行 Logstash
1. Logstash 安装与使用
Logstash 版本地址:https://www.elastic.co/guide/en/logstash/7.6/releasenotes.html
截止2020-05-25,最新版本为7.6.2,这里选择安装 7.6.1 版本,版本详细内容请阅读 Release Notes。
# 下载 Logstash
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.6.1.tar.gz
# 等待下载完成后,解压文件
tar -xzvf logstash-7.6.1.tar.gz
解压完成后进入目录下 config 目录下。
jvm.options log4j2.properties logstash-sample.conf logstash.yml pipelines.yml startup.options
编辑 logstash.yml,配置ES连接信息。
xpack.management.elasticsearch.username: ***
xpack.management.elasticsearch.password: ***
xpack.management.elasticsearch.hosts: ["http://127.0.0.1:9200"]
编辑 pipelines.yml,配置管道信息
input {
kafka {
bootstrap_servers => ["127.0.0.1:9092"]
group_id => "test-consumer-group"
auto_offset_reset => "earliest"
consumer_threads => 5
decorate_events => true
topics => ["customTopic"]
codec => "json"
}
}
output {
elasticsearch {
hosts => ["http://172.0.0.1:9200"]
user => "customUser"
password => "customPwd"
index => "test_logs"
}
stdout { codec => json_lines }
}
配置完成后,测试运行 Logstash
# 进入 Logstash 目录下执行(此命令需要必须在logstash目录下运行)
bin/logstash -f config/pipelines.yml
2. Docker Build Logstash
其实可以直接从公有仓库中拉取Kafka/Logstash镜像,但是因为我需要运行在Kubernetes环境中,所以公有镜像具有局限性。我需要在容器每次初始化时自定义Logstash配置。最典型的例子就像:Logstash公有镜像的容器时区问题,在自定义镜像中得以解决。
- 编写 Logstash 启动脚本
cd /usr/local/logstash
bin/logstash -f config/pipelines.yml
- 编写 Logstash Dockerfile
# 指定镜像源
FROM java:8
MAINTAINER cuixiaojian
# 将 Logstash 文件目录加入容器中
COPY logstash /usr/local/logstash
# 将编写的sh启动脚本加入容器中
COPY logstash.sh /usr/local/logstash.sh
# 指定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 容器启动后执行启动脚本
ENTRYPOINT sh /usr/local/logstash.sh
最终的文件目录是这样的:
准备工作完成后执行 build 生成镜像
# 进入Docker 上下文目录中
cd /usr/local/logstash
# 执行 build 构建
docker build -t logstash:1.0.0 -f Dockerfile .
至此镜像的构建工作完成。接着需要将此镜像推送至私有镜像仓库,以备Kubernetes去使用他。
# 登录远程镜像仓库,这里使用的是腾讯云私有仓库
docker login docker login --username=*** --password=*** ccr.ccs.tencentyun.com
docker tag logstash:1.0.0 ccr.ccs.tencentyun.com/namespace/logstash:1.0.0
docker push logstash:1.0.0 ccr.ccs.tencentyun.com/namespace/logstash:1.0.0
3. Kubernetes Deploy Logstash
为何需要自定义 Logstash 镜像,因为 K8S 的容灾机制会使 Logstash 容器因各种原因导致停止工作时,重新启动容器。而当使用一个公有镜像容器初始化时,需要人工补偿配置信息,Logstash 将不再继续工作。
- 编写 Deployment.yml 文件(以腾讯云TKE为例)
apiVersion: apps/v1beta2
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "2"
generation: 2
# 自定义标签名
labels:
k8s-app: logstash
qcloud-app: logstash
# 自定义Deploy名
name: logstash
# 自定义命名空间
namespace: default
selfLink: /apis/apps/v1beta2/namespaces/default/deployments/logstash
spec:
progressDeadlineSeconds: 600
# 自定义配置运行POD数量
replicas: 1
# 自定义修订历史保存量
revisionHistoryLimit: 10
selector:
# 自定义标签名
matchLabels:
k8s-app: logstash
qcloud-app: logstash
strategy:
# 滚动更新配置
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
creationTimestamp: null
# 自定义标签名
labels:
k8s-app: logstash
qcloud-app: logstash
spec:
# 容器环境变量
containers:
- env:
- name: PATH
value: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- name: LANG
value: C.UTF-8
- name: JAVA_HOME
value: /usr/lib/jvm/java-8-openjdk-amd64
- name: JAVA_VERSION
value: 8u111
- name: JAVA_DEBIAN_VERSION
value: 8u111-b14-2~bpo8+1
- name: CA_CERTIFICATES_JAVA_VERSION
value: "20140324"
- name: TZ
value: Asia/Shanghai
image: ccr.ccs.tencentyun.com/namespace/logstash:1.0.0
# 镜像拉取方式:如果本地不存在则去远程仓库拉取
imagePullPolicy: IfNotPresent
# 容器名称
name: container-logstash
# 资源占用配置
resources:
limits:
# 最大CPU核数
cpu: "2"
# 最大内存
memory: 2Gi
requests:
# 初始CPU核数
cpu: "1"
# 初始内存
memory: 1Gi
securityContext:
privileged: false
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
# 镜像拉取秘钥
imagePullSecrets:
- name: qcloudregistrykey
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
使用 Kubectl 客户端操作
# 应用配置
kubectl apply -f /usr/local/logstash-deploy.yml
# 查看部署结果
kubectl get deploy
# 查看部署日志
kubectl logs logstash-**
更多推荐
所有评论(0)