本方案采用docker-compose的方式部署,docker-compose在ubuntu下可直接使用apt-get install docker-compose -y
安装
一. 部署ELK服务
1. 先创建logstash.conf
文件
input {
beats {
port => 5045
type => "snaptobook-nginx"
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
date {
match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
}
}
output {
elasticsearch {
hosts => ["http://my-elast:9200"] # 替换为你的 Elasticsearch 地址
index => "nginx_logs"
}
stdout {
codec => rubydebug # 用于调试
}
}
2. 在同级目录下创建docker-compose.yaml
文件
# docker-compose.yaml
version: '3'
services:
# elasticsearch 配置,该服务用于数据存储
my-elast:
image: 'elasticsearch:8.14.3'
container_name: my-elast
volumes:
- ./data:/usr/share/elasticsearch/data # 映射数据卷,如果提示权限问题,可先创建目录,再给予其 777权限 即 mkdir data && chmod 777 -R data
environment:
- ES_JAVA_OPTS=-Xms512m -Xmx512m # 限制内存大小为1G
- discovery.type=single-node # 模式为单节点
- LANG=C.UTF-8
- LC_ALL=C.UTF-8
- xpack.security.enabled=false # 关闭安全
restart: always # 自动启动
# 日志配置
logging:
driver: "json-file"
options:
max-size: "50m"
max-file: "10"
# 网络配置
networks:
- elk
# kibana配置,该服务是用于数据展示,其会提供一个可视化的操作页面
my-kibana:
image: 'kibana:8.14.3'
container_name: my-kibana
ports:
- "80:5601" # 端口映射,最终访问是通过 http://ip:80 访问
environment:
- ELASTICSEARCH_HOSTS=http://my-elast:9200 # 配置elasticsearch的地址
- LANG=C.UTF-8
- LC_ALL=C.UTF-8
networks:
- elk
# logstash配置,该服务用于数据清洗,其会提供一个清洗数据的工具
my-logstash:
image: 'logstash:8.14.3'
container_name: my-logstash
ports:
- "5555:5045" # 端口映射,数据采集工具将会把数据推送到5555端口内,其中的5045是在配置文件logstash.conf中定义的
volumes:
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf # 配置文件映射
environment:
- LOGSTASH_JAVA_OPTS=-Xms256m -Xmx256m # 限制内存大小为1G
- xpack.monitoring.elasticsearch.hosts=http://my-elast:9200 # 配置elasticsearch的地址
networks:
- elk
# 网络配置
networks:
elk:
driver: bridge
3. 启动服务
docker-compose up -d
服务启动后,可以通过docker ps
查看已经启动的容器,也可以通过docker-compose logs -f --tail 100
的方式查看日志.
此时浏览器打开http://<你的IP>
来访问控制面板
配置日志收集脚本
在需要被采集的服务器上,使用docker安装filebeat来收集日志,并将其发送给logstash
.
filebeat
的配置文件
# filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/access.log
output.logstash:
hosts: ["192.168.23.2:5555"] # `192.168.23.2`为ELK部署服务器的IP,若采集的是本机的日志,可以使用127.0.0.1
运行docker采集日志
docker run -d \
--name=filebeat \
--user=root \
--volume="xxx/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro" \
--volume="/var/log/nginx/access.log:/var/log/nginx/access.log:ro" \
docker.elastic.co/beats/filebeat:8.14.3 filebeat -e -strict.perms=false
其中
--volume="xxx/filebeat.yml:/usr/share/filebeat/filebeat.yml"
是将配置文件映射到容器中,xxx
部署需要依照实际情况替换
--volume="/var/log/nginx/access.log:/var/log/nginx/access.log:ro"
是将需要采集的日志文件映射到容器中
运行完成后,即可打开kibana
控制台去查看日志
网友评论