# 基于 Docker 安装 Logstash 详细指南
Logstash 是 Elastic Stack(ELK)的核心组件之一,用于收集、处理和转发日志数据。下面是通过 Docker 安装 Logstash 的完整步骤:
## 1. 拉取官方 Logstash 镜像
```bash
docker pull docker.elastic.co/logstash/logstash:8.13.0
```
> **版本说明**:
> - 使用与 Elasticsearch/Kibana 相同的版本(如 8.13.0)
> - 查看所有可用版本:`docker images docker.elastic.co/logstash/logstash --digests`
## 2. 准备配置文件目录结构
创建必要的目录结构:
```bash
mkdir -p ~/logstash/{config,pipeline,data}
cd ~/logstash
```
目录说明:
- **config/**:Logstash 配置文件
- **pipeline/**:数据处理管道配置
- **data/**:持久化数据存储
## 3. 创建配置文件
### (1) 主配置文件:`config/logstash.yml`
```yaml
http.host: "0.0.0.0"
path.data: /usr/share/logstash/data
```
### (2) 管道配置文件:`pipeline/logstash.conf`
```ruby
input {
# 示例:文件输入插件(收集Nginx日志)
file {
path => "/var/log/nginx/access.log"
start_position => "beginning"
}
}
filter {
# 示例:Grok解析日志格式
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
}
output {
# 输出到控制台(测试用)
stdout { codec => rubydebug }
# 输出到Elasticsearch(生产用)
elasticsearch {
hosts => ["http://elasticsearch:9200"] # ES容器名称
index => "nginx-logs-%{+YYYY.MM.dd}"
}
}
```
## 4. 运行 Logstash 容器
### 基本运行命令:
```bash
docker run -d \
--name my-logstash \
-p 5044:5044 \
-v ~/logstash/config:/usr/share/logstash/config \
-v ~/logstash/pipeline:/usr/share/logstash/pipeline \
-v ~/logstash/data:/usr/share/logstash/data \
docker.elastic.co/logstash/logstash:8.13.0
```
### 参数说明:
- `-p 5044:5044`:暴露 Beats 输入端口(Filebeat/Packetbeat)
- `-v`:映射配置目录
- `--network`:建议加入ELK专属网络(见下面)
## 5. 与 Elastic Stack 集成
### (1) 创建 ELK 专属网络:
```bash
docker network create elk-net
```
### (2) 启动 Elasticsearch 和 Kibana:
```bash
# Elasticsearch
docker run -d --name elasticsearch \
--network elk-net \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
docker.elastic.co/elasticsearch/elasticsearch:8.13.0
# Kibana
docker run -d --name kibana \
--network elk-net \
-p 5601:5601 \
docker.elastic.co/kibana/kibana:8.13.0
```
### (3) 修改 Logstash 配置连接 Elasticsearch:
更新 `pipeline/logstash.conf` 中的输出配置:
```ruby
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"] # 使用容器名
user => "elastic"
password => "your_password" # 替换为ES密码
cacert => "/usr/share/logstash/config/certs/ca.crt"
}
}
```
## 6. 高级配置选项
### (1) 自定义插件安装:
```bash
# 创建Dockerfile
tee Dockerfile <<EOF
FROM docker.elastic.co/logstash/logstash:8.13.0
RUN logstash-plugin install logstash-output-sql
EOF
# 构建镜像
docker build -t custom-logstash:8.13.0 .
```
### (2) 多管道配置:
在 `config/pipelines.yml` 中:
```yaml
- pipeline.id: nginx
path.config: "/usr/share/logstash/pipeline/nginx.conf"
- pipeline.id: syslog
path.config: "/usr/share/logstash/pipeline/syslog.conf"
```
### (3) 性能调优:
```bash
# 限制资源使用
docker run -d --name optimized-logstash \
--cpus 2 \
--memory 4g \
--ulimit memlock=-1:-1 \
... [其他参数]
```
## 7. 验证与排查
### (1) 检查容器状态:
```bash
docker logs my-logstash
```
### (2) 测试管道配置:
```bash
docker exec -it my-logstash bash
./bin/logstash -t -f /usr/share/logstash/pipeline/
```
### (3) 在 Kibana 中查看数据:
访问 `http://localhost:5601` → Stack Management → Index Patterns
## 8. 常用命令
| 功能 | 命令 |
|------|------|
| 启动 | `docker start my-logstash` |
| 停止 | `docker stop my-logstash` |
| 重启 | `docker restart my-logstash` |
| 进入容器 | `docker exec -it my-logstash bash` |
| 删除容器 | `docker rm -f my-logstash` |
## 常见问题解决
1. **启动失败:配置文件错误**
```bash
# 检查语法
docker exec my-logstash logstash --path.settings /usr/share/logstash/config -t
```
2. **ES连接问题**
- 确保网络互通:`docker inspect elasticsearch | grep IPAddress`
- 检查SSL证书路径
3. **性能优化**
- 增加JVM堆内存:在 `config/jvm.options` 中添加
```
-Xms2g
-Xmx2g
```
> 提示:官方文档是最佳参考:[Logstash Docker 配置](https://www.elastic.co/guide/en/logstash/current/docker-config.html)