摘要

本文主要记录内容:

  1. Logstash 安装使用(配合Kafka同步数据至ES)
  2. 使用Docker生成Logstash镜像
  3. 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公有镜像的容器时区问题,在自定义镜像中得以解决。

  1. 编写 Logstash 启动脚本
cd /usr/local/logstash
bin/logstash -f config/pipelines.yml
  1. 编写 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 将不再继续工作。

  1. 编写 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-**
Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐