可以教我用centos docker-compose搭建一个springboot整合的elk吗
时间: 2023-05-27 15:04:35 浏览: 240
当然可以,以下是详细的步骤:
1. 安装docker和docker-compose
在CentOS上安装Docker和Docker Compose,可以使用以下命令:
```
sudo yum update -y
sudo yum install -y docker
sudo systemctl start docker
sudo systemctl enable docker
sudo systemctl status docker
```
Docker Compose是Docker的一个插件,需要单独安装:
```
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
```
2. 创建工作目录
在你选择的目录里创建一个名为`elk`的目录,并进入该目录。
```
mkdir elk && cd elk
```
在该目录中新建以下文件夹
```
mkdir -p logs/elasticsearch config/elasticsearch logs/kibana logs/logstash plugin
```
3. 创建elasticsearch docker compose
在`elk`目录下,创建一个名为`docker-compose.yml`的文件,并加入以下内容:
```yml
version: '3'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0
container_name: elasticsearch
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
volumes:
- ./logs/elasticsearch:/usr/share/elasticsearch/logs
- ./config/elasticsearch:/usr/share/elasticsearch/config
ports:
- 9200:9200
- 9300:9300
networks:
- elk
networks:
elk:
```
说明:
- `elasticsearch`是容器名称,可以根据实际情况调整
- `discovery.type=single-node`表示只有一个节点
- `xpack.security.enabled=false`表示不启用安全模式
- `ES_JAVA_OPTS=-Xms512m -Xmx512m`表示分配512MB内存给Elasticsearch容器
- `./logs/elasticsearch:/usr/share/elasticsearch/logs`表示将本地的`logs/elasticsearch`目录映射到Elasticsearch容器内的`/usr/share/elasticsearch/logs`目录
- `./config/elasticsearch:/usr/share/elasticsearch/config`表示将本地的`config/elasticsearch`目录映射到Elasticsearch容器内的`/usr/share/elasticsearch/config`目录
- `9200:9200`和`9300:9300`表示将容器内的9200和9300端口映射到宿主机上,方便通过浏览器访问
4. 创建kibana docker compose
在`elk`目录下,继续编辑`docker-compose.yml`,添加以下内容:
```yml
version: '3'
services:
elasticsearch:
...
networks:
- elk
kibana:
image: docker.elastic.co/kibana/kibana:7.14.0
container_name: kibana
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
volumes:
- ./logs/kibana:/usr/share/kibana/logs
ports:
- 5601:5601
depends_on:
- elasticsearch
networks:
- elk
networks:
elk:
```
说明:
- `kibana`服务依赖于`elasticsearch`服务,必须要先启动`elasticsearch`
- `ELASTICSEARCH_HOSTS=http://elasticsearch:9200`表示连接到Elasticsearch容器的9200端口
- `5601:5601`表示将容器内的5601端口映射到宿主机上,方便通过浏览器访问
5. 创建logstash docker compose
在`elk`目录下,继续编辑`docker-compose.yml`,添加以下内容:
```yml
version: '3'
services:
elasticsearch:
...
networks:
- elk
kibana:
...
networks:
- elk
logstash:
image: docker.elastic.co/logstash/logstash:7.14.0
container_name: logstash
volumes:
- ./plugin:/usr/share/logstash/plugins
command: logstash -f /usr/share/logstash/pipeline/logstash.conf
ports:
- 5044:5044
- 5000:5000
depends_on:
- elasticsearch
networks:
- elk
networks:
elk:
```
说明:
- `logstash`服务依赖于`elasticsearch`服务,必须要先启动`elasticsearch`
- `./plugin:/usr/share/logstash/plugins`表示将本地的`plugin`目录映射到Logstash容器内的`/usr/share/logstash/plugins`目录
- `command: logstash -f /usr/share/logstash/pipeline/logstash.conf`表示运行`/usr/share/logstash/pipeline/logstash.conf`文件中的配置
- `5044:5044`和`5000:5000`表示将容器内的5044和5000端口映射到宿主机上,方便和应用程序交互
6. 配置logstash
在`elk`目录下,创建`logstash/pipeline`目录,并在其中新建名为`logstash.conf`的文件,并加入以下内容:
```conf
input {
tcp{
port => 5000
type => "spring-boot"
}
udp {
port => 5000
type => "spring-boot"
}
}
filter {
if [type] == "spring-boot" {
grok {
match => {
"message" => "%{TIMESTAMP_ISO8601:logtime} %{LOGLEVEL:loglevel} --- \[%{DATA:thread}\] %{DATA:class}.%{DATA:method} : %{GREEDYDATA:message}"
}
}
}
}
output {
elasticsearch {
hosts => ["elasticsearch:9200"]
index => "spring-boot-%{+YYYY.MM.dd}"
}
}
```
说明:
- `input`表示输入流设置,这里使用了TCP或UDP协议,监听5000端口
- `filter`表示过滤流设置,grok插件用来解析正则表达式。这里用正则表达式解析Spring Boot应用程序产生的日志文件
- `output`表示输出流设置,将过滤后的日志数据输出到Elasticsearch中
7. 使用Docker Compose启动服务
在`elk`目录下,运行以下命令启动服务:
```
docker-compose up -d
```
等待一些时间后,整个`ELK`服务就启动了。
8. 测试
启动所有容器后,让Spring Boot应用程序将日志发送到端口5000
打开浏览器,输入`http://你的ip:5601/app/discover`访问Kibana应用程序。在Kibana应用程序中,创建索引,并在Discover页面中查看项目的日志信息。
现在,您已经成功地使用Docker Compose在CentOS上搭建了一个Spring Boot整合的ELK。
阅读全文