Docker 安装 logstash

# 基于 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)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容