当前位置: 首页 > news >正文

二进制方式安装部署 Logstash

背景说明

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 => jsonauto_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 => jsonauto_offset_reset => "latest"consumer_threads => 4fetch_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.nowdate_str = time.strftime("%Y%m%d")pod_name = event.get("pod_name")if pod_nameevent.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 {dailyrotate 7compressdelaycompressmissingoknotifemptycreate 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'
http://www.xdnf.cn/news/1405981.html

相关文章:

  • Java试题-选择题(23)
  • 【Linux基础】深入理解计算机启动原理:MBR主引导记录详解
  • 并发编程:Java中的多线程与线程池!
  • 魔方的使用
  • LangGraph 深度解析(二):掌握 LangGraph 函数式 API 的状态化 AI 工作流
  • 每日算法题【二叉树】:堆的实现、堆排序的实现、文件中找TopK
  • [光学原理与应用-338]:ZEMAX - Documents\Zemax\Samples
  • 吴恩达机器学习作业九:kmeans聚类
  • 2025最确定性的答案:AI+IP的结合
  • CNB远程部署和EdgeOne Pages
  • 恶补DSP:3.F28335的ePWM模块
  • Wheat Gene ID Convert Tool 小麦中国春不同参考基因组GeneID转换在线工具
  • TensorFlow 深度学习 | 使用底层 API 实现模型训练(附可视化与 MLP)
  • 「日拱一码」066 深度学习——Transformer
  • ADB常用命令大全
  • Linux中的Shell编程 第一章
  • 第09章 t检验:两独立样本t检验
  • 模拟|双指针
  • 【CUDA进阶】MMA分析Bank Conflict与Swizzle(下)
  • python pyqt5开发DoIP上位机【介绍】
  • 【cancelToken取消重复请求】
  • uniapp开发 移动端使用字符串替换注意事项
  • GEE中上传研究区域范围
  • ModuleNotFoundError: No module named ‘_cffi_backend‘
  • 服务器CPU飙升该如何排查火焰图
  • 互联网医院系统优势介绍
  • Java试题-选择题(22)
  • 诊断通信管理(Diagnostic Communication Management)详解
  • Shell脚本命令扩展
  • Langflow核心技术学习笔记(新)