docker安装ELKF
准备一台ubuntu18.04的机器
本次搭建使用的版本都是7.6.2,保持版本统一,避免不可预料的异常
一.安装elasticsearch
本次安装的es为单机版,没做集群化部署
前置工作,首先编辑 /etc/sysctl.conf,添加
vm.max_map_count=262144
一行,sycstl -p重置
- 创建docker的统一网络,使kibana能与es通信
docker network create somenetwork
- docker运行es
docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms=256m -Xms=256m" --network=somenetwork -v /usr/local/docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:7.6.2
-e discovery.type=single-node
表示单个节点开发
-e ES_JAVA_OPTS="-Xms=256m -Xms=256m"
设置es启动内存,避免启动失败
--network=somenetwork
指定es容器的启动网络,为了让下一步kibana能访问到
-v /usr/local/docker/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
挂载es的配置文件,方便修改
- 修改elasticsearch.yml
http.host: 192.168.8.10 #本地地址
#跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"
- 查看启动结果
docker restart es #修改配置文件后重启
docker ps
curl localhost:9200
二.安装kibana
- 启动kibana容器
docker run -it -d -e ELASTICSEARCH_URL=http://192.168.8.10:9200 --name kibana -p 5601:5601 --network=somenetwork kibana:7.6.2
- 进入kibana容器,修改配置文件
docker exec -it kibana /bin/bash
编辑kibana.yml
bash-4.2$ vi /usr/share/kibana/config/kibana.yml
#
# ** THIS IS AN AUTO-GENERATED FILE **
#
# Default Kibana configuration for docker target
server.name: kibana
server.host: "0.0.0.0"
elasticsearch.hosts: [ "http://192.168.8.10:9200" ] #改成es地址
xpack.monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: "zh-CN" #汉化kibana界面
- 退出容器重启kibana
docker restart kibana
- 测试,访问http://192.168.8.10:5601
三、安装logstash
logstash最关键的是conf.d下面的xxx.conf文件,用好logstash就要学会配置conf文件
- 新建挂载配置文件logstash.yml和base.conf
logstash.yml
内容:
path.config: /usr/share/logstash/conf.d/*.conf
path.logs: /var/log/logstash
base.conf
内容:
input {
beats {
port => 5044 # logstash暴露的端口
include_codec_tag => false # 去除filebeat的默认tag
}
}
output {
# 下面是根据接收的条件判断,输出到es中的不同索引
if [fields][log_type] == "base" { # fields\log_type是在filebeat中定义的
elasticsearch {
hosts => ["192.168.8.10:9200"] #es地址
index => "skymbase-logs" #索引名,自定义
}
}
# 也可使用 tags,tags也是在filebeat中定义的,第二个"[0]"是logstash接收的tags是个数组,一定要加,具体数字可以查看日志
# if [tags][0] == "skymbase-logs" { # fields\log_type是在filebeat中定义的
# elasticsearch {
# hosts => ["192.168.8.10:9200"]
# index => "skymbase-logs"
# }
# }
if [fields][log_type] == "project"{
elasticsearch {
hosts => ["192.168.8.10:9200"]
index => "skymproject-logs"
}
}
if [fields][log_type] == "nginx"{
elasticsearch {
hosts => ["192.168.8.10:9200"]
index => "nginx-logs"
}
}
stdout { codec => rubydebug }
}
- 启动docker容器
docker run -it -d -p 5044:5044 --name logstash -v /usr/local/docker/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml -v /usr/local/docker/logstash/conf.d/:/usr/share/logstash/conf.d/ logstash:7.6.2
- 查看启动状态
docker ps
四、安装Filebeat
- 新建filebeat.yml
filebeat.inputs:
- type: log # 默认log,还有stdin输入
enabled: true
paths:
- /var/log/skym/skymbase.log # 读取日志的位置,可使用正则表达来通配
tags: ["skymbase-logs"] # 标记tag,方便logstash中来区分日志源
fields:
log_type: base # 键值对,key、value均可自定义
# 将以空格开头的所有行合并到上一行 并把以Caused by开头的也追加到上一行
multiline.pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:'
multiline.negate: false
multiline.match: after
- type: log
enabled: true
paths:
- /var/log/skym/skymproject.log
tags: ["skymproject-logs"]
fields:
log_type: project
multiline.pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:'
multiline.negate: false
multiline.match: after
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
tags: ["nginx-logs"]
fields:
log_type: nginx
- type: log
enabled: true
paths:
- /var/log/nginx/error.log
tags: ["nginx-error"]
output.logstash:
hosts: ['192.168.8.10:5044'] # 输出到logstash,启动filebeat前必须先启动要输入的工具,这边必须先启动"192.168.8.10:5044"上的logstash
- docker启动filebeat容器
docker run --name filebeat --restart=always --user=root -d -v /home/admin/skymbase.log:/var/log/skym/skymbase.log -v /home/admin/skymproject.log:/var/log/skym/skymproject.log -v /var/log/nginx/access.log:/var/log/nginx/access.log -v /usr/share/docker/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro -v /var/lib/docker/containers:/var/lib/docker/containers:ro -v /var/run/docker.sock:/var/run/docker.sock:ro docker.elastic.co/beats/filebeat:7.6.2
- 查看容器启动状态
docker ps