二进制方式安装部署 Logstash

发布于:2025-08-31 ⋅ 阅读:(25) ⋅ 点赞:(0)

背景说明

Logstash 是一个开源的数据收集和处理引擎,是 Elastic Stack 的重要组件之一。在本方案中,我们使用 Logstash 作为 Kubernetes 集群日志收集的关键组件,主要用于:

  • 从 Kafka 消费各服务的日志数据
  • 对日志数据进行过滤和转换
  • 将处理后的日志按照特定格式持久化到文件系统

为什么选择二进制部署?

  1. 更灵活的配置控制
  2. 更好的性能优化空间
  3. 便于系统资源调优
  4. 适合特定的部署环境需求

系统要求

硬件推荐配置

  • CPU: 8核心及以上
  • 内存: 16GB及以上
  • 磁盘: 根据日志量规划,建议系统盘500GB以上,数据盘按需配置

软件要求

  • 操作系统: CentOS 7/8 或 BigCloud Enterprise Linux For Euler 21.10/22.10 LTS
  • Java环境: JDK 17(Logstash 8.10.2 推荐)
  • 磁盘格式: XFS或EXT4(推荐XFS,更好的大文件处理性能)

详细部署步骤

1. 安装 Java 环境

JDK 安装部署文档-CSDN博客

说明:

  • JDK 17 提供更好的性能和安全性
  • 建议使用官方认证的JDK发行版
  • 安装后需验证Java版本:java -version

2. 目录规划和创建

# 安装目录
mkdir -p /opt/logstash
# 配置目录
mkdir -p /etc/logstash/conf.d
# 数据目录
mkdir -p /var/lib/logstash
# 日志目录
mkdir -p /var/log/logstash
# 应用日志存储目录
mkdir -p /data/k8s-log

目录说明:

  • /opt/logstash: 程序安装目录
  • /etc/logstash: 配置文件目录
  • /var/lib/logstash: 数据持久化目录
  • /var/log/logstash: Logstash自身日志目录
  • /data/k8s-log: 应用日志存储目录

3. 下载和安装Logstash

# logstash-8.10.2-linux-x86_64.tar.gz 安装包自己官网下载搞定
cd /opt/logstash
tar -xzvf logstash-8.10.2-linux-x86_64.tar.gz
mv logstash-8.10.2/* .
rmdir logstash-8.10.2
rm -f logstash-8.10.2-linux-x86_64.tar.gz

4. 配置文件详解

4.1 主配置文件 (/etc/logstash/logstash.yml)
path.data: /var/lib/logstash
path.logs: /var/log/logstash
pipeline.workers: 8                    # 并行处理线程数,建议设置为CPU核心数
pipeline.batch.size: 3000              # 批处理大小,根据内存调整
pipeline.batch.delay: 50               # 批处理等待时间(ms)
queue.type: persisted                  # 使用持久化队列,断电不丢数据
queue.max_bytes: 1gb                   # 队列大小,根据内存调整
log.level: info                        # 日志级别

配置说明:

  • pipeline.workers: 影响处理性能,建议设置为CPU核心数
  • pipeline.batch.size: 越大吞吐量越高,但延迟也越高
  • queue.type: persisted可保证数据不丢失,但有性能开销
  • queue.max_bytes: 需要根据内存大小合理设置
4.2 JVM配置 (/etc/logstash/jvm.options)
-Xms4g                         
-Xmx4g                              
-XX:+UseG1GC                        
-XX:G1ReservePercent=20   

JVM调优说明:

  • 堆大小建议设置为系统内存的50%
  • G1收集器适合大内存场景
  • 可通过GC日志监控调整参数
4.3 Pipeline配置 (/etc/logstash/conf.d/k8s-logs.conf)
input {
  kafka {
    bootstrap_servers => "192.168.103.185:9092,192.168.103.201:9092,192.168.103.136:9092"
    topics => ["k8s-logs-assistant-master", "k8s-logs-ai-search-agent", "k8s-logs-doc-agent", "k8s-logs-meeting-backend"]
    group_id => "logstash-k8s-logs-group1"
    client_id => "logstash-k8s-logs-group1-1"
    codec => json
    auto_offset_reset => "latest"
    consumer_threads => 4               # Kafka消费线程数
    fetch_max_bytes => "5242880"       # 每次拉取最大字节数
    max_poll_records => "5000"         # 每次拉取最大记录数
    decorate_events => false           # 不添加Kafka元数据
  }

  kafka {
    bootstrap_servers => "192.168.103.185:9092,192.168.103.201:9092,192.168.103.136:9092"
    topics => ["k8s-logs-gene-core", "k8s-logs-gene-tools", "k8s-logs-gene-web", "k8s-logs-llm-agent", "k8s-logs-llm-schedule-management"]
    group_id => "logstash-k8s-logs-group2"
    client_id => "logstash-k8s-logs-group2-1"
    codec => json
    auto_offset_reset => "latest"
    consumer_threads => 4
    fetch_max_bytes => "5242880"
    max_poll_records => "5000"
    decorate_events => false
  }
}

filter {
  mutate {
    add_field => {
      "service_name" => "%{[fields][service_name]}"
      "pod_name" => "%{[fields][pod_name]}"
      "log_filename" => "%{[filename]}"
    }
  }

  ruby {
    code => '
      time = Time.now
      date_str = time.strftime("%Y%m%d")
      pod_name = event.get("pod_name")
      if pod_name
        event.set("pod_dir", "#{date_str}-#{pod_name}")
      end
    '
  }
}

output {
  file {
    path => "/data/k8s-log/%{service_name}/%{pod_dir}/%{log_filename}"
    codec => line { format => "%{message}" }
    flush_interval => 500               # 文件写入刷新间隔(ms)
    gzip => false                       # 是否压缩
  }
}

5. 系统服务配置

/usr/lib/systemd/system/logstash.service:

[Unit]
Description=logstash
After=network.target

[Service]
Type=simple
# 移除用户相关配置,使用 root 运行
Environment=LS_HOME=/opt/logstash
Environment=LS_SETTINGS_DIR=/etc/logstash
Environment=LS_JAVA_OPTS="-Xms2g -Xmx2g"
Environment=JAVA_HOME=/usr/lib/jvm/java-11-openjdk
ExecStart=/opt/logstash/bin/logstash --path.settings /etc/logstash -f /etc/logstash/conf.d/k8s-logs.conf --config.reload.automatic --config.reload.interval=3s --log.level=info
Restart=always
RestartSec=60
WorkingDirectory=/opt/logstash
StandardOutput=append:/var/log/logstash/logstash.log
StandardError=append:/var/log/logstash/error.log

[Install]
WantedBy=multi-user.target

6. 性能优化建议

6.1 系统层面优化
# 调整系统限制
cat >> /etc/security/limits.conf << EOF
root soft nofile 65536
root hard nofile 65536
root soft nproc 4096
root hard nproc 4096
EOF

# 调整内核参数
cat >> /etc/sysctl.conf << EOF
vm.max_map_count=262144
net.core.somaxconn=65535
EOF
sysctl -p

# 磁盘挂载优化(针对XFS)
mount -o noatime,nodiratime,nobarrier /dev/sdb1 /data/k8s-log
6.2 Logstash性能监控
# API监控
curl -XGET 'localhost:9600/_node/stats/pipelines?pretty'

# 性能指标
curl -XGET 'localhost:9600/_node/stats?pretty'

7. 启动服务

# 重新加载 systemd
systemctl daemon-reload
# 启动 Logstash
systemctl start logstash
# 设置开机启动
systemctl enable logstash
# 查看状态
systemctl status logstash

8. 日志管理

# 查看 Logstash 日志
tail -f /var/log/logstash/logstash.log

# 检查进程
ps aux | grep logstash

# 设置日志轮转
cat > /etc/logrotate.d/logstash << EOF
/var/log/logstash/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 644 root root
}
EOF

运维注意事项

1. 监控告警

  • 配置CPU、内存、磁盘使用率告警
  • 监控Pipeline处理延迟
  • 监控Kafka消费延迟

2. 备份策略

  • 定期备份配置文件
  • 配置文件版本控制
  • 关键日志异地备份

3. 故障处理

  • 建立故障处理流程
  • 保存关键运行指标
  • 定期进行故障演练

常见问题处理

1. 写入延迟高

  • 检查磁盘IO情况
  • 调整flush_interval参数
  • 优化文件系统配置

2. 内存使用过高

  • 调整batch size
  • 检查JVM配置
  • 监控内存泄漏

3. CPU使用率高

  • 调整worker数量
  • 优化处理逻辑
  • 检查GC情况

监控建议

# 检查磁盘使用情况
df -h /data/k8s-log

# 检查目录大小
du -sh /data/k8s-log/*

# 检查Logstash状态
curl -XGET 'localhost:9600/_node/stats?pretty'

网站公告

今日签到

点亮在社区的每一天
去签到