docker 搭建ELK日志采集系统
一般来说数据流动是Filebeat对日志文件进行搜集,然后给到Kafka,再给到Logstash过滤,然后存到Elasticsearch中,最后在Kibana的可视化界面进行搜索。 ELK docker 安装
一、安装docker
Docker 的安装_傲傲娇的博客-CSDN博客
二、配置es挂载文件和目录
mkdir -p /opt/elasticsearch/{config,data,plugins}
chmod 777 /opt/elasticsearch/data
在config目录下创建elasticsearch.yml配置文件
cluster.name: elasticsearch-cluster
# 节点名称
node.name: elasticsearch-node1
# # 绑定host,0.0.0.0代表当前节点的ip
network.host: 0.0.0.0
# # 设置其它节点和该节点交互的ip地址,如果不设置它会自动判断,值必须是个真实的ip地址(本机ip),因为我使用的是docker启动,不是简单127.0.0.1,要查看具体分配的ip
network.publish_host: 192.168.168.160
# # 设置对外服务的http端口,默认为9200
http.port: 9200
# # 设置节点间交互的tcp端口,默认是9300
transport.tcp.port: 9300
# # 是否支持跨域,默认为false
http.cors.enabled: true
# # 当设置允许跨域,默认为*,表示支持所有域名,如果我们只是允许某些网站能访问,那么可以使用正则表达式。比如只允许本地地址。 /https?:\/\/localhost(:[0-9]+)?/
http.cors.allow-origin: "*"
# # 表示这个节点是否可以充当主节点
node.master: true
# # 是否充当数据节点
node.data: true
# # 所有主从节点ip:port
discovery.seed_hosts: ["192.168.168.160:9300"]
# # 这个参数决定了在选主过程中需要 有多少个节点通信 预防脑裂
discovery.zen.minimum_master_nodes: 1
三、启动elasticsearch
docker run --restart=always --name elasticsearch \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms256m -Xmx256m" \
-v /opt/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /opt/elasticsearch/data:/usr/share/elasticsearch/data \
-v /opt/elasticsearch/plugins:/usr/share/elasticsearch/plugins -d elasticsearch:7.11.1
启动成功后可以访问http://ip:9200,看到如下信息说明启动成功。
四、安装ik分词器
docker exec -it elasticsearch /bin/bash
cd /usr/share/elasticsearch/bin/
./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.11.1/elasticsearch-analysis-ik-7.11.1.zip
exit
docker restart elasticsearch
五、安装elasticsearch-head
docker run --restart=always --name elasticsearch-head -p 9100:9100 -d mobz/elasticsearch-head:5
启动完成后可以访问http://ip:9100,填写对应的elasticsearch的地址,点击连接。
六、安装kibana
创建对外挂载的目录和配置文件
mkdir -p /opt/kibana/conf
chmod 777 /opt/kibana/conf
cd /opt/kibana/conf
创建kibana.yml,内容如下
server.name: kibana
# kibana的主机地址 0.0.0.0可表示监听所有IP
server.host: "0.0.0.0"
# kibana访问es的URL
elasticsearch.hosts: [ "http://192.168.168.160:9200" ]
# # 语言
i18n.locale: "zh-CN"
启动kibana
docker run --restart=always \
--name elasticsearch_kibana \
--privileged=true \
-p 5601:5601 \
-v /opt/kibana/conf/kibana.yml:/usr/share/kibana/config/kibana.yml \
-d docker.io/kibana:7.11.1
启动成功后访问http://ip:5601,可以看到你的es的信息
七、安装logstash
创建logstash配置文件目录
mkdir -p /opt/logstash/conf.d
在/opt/logstash目录下创建logstash.yml
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://192.168.168.160:9200" ]
path.config: /usr/share/logstash/config/conf.d/*.conf
path.logs: /usr/share/logstash/logs
在/opt/logstash/conf.d目录下创建syslog.conf
input {
syslog {
type => "system-syslog"
port => 5044
}
}
output {
elasticsearch {
# 定义es服务器的ip
hosts => ["192.168.168.160:9200"]
# 定义索引
index => "system-syslog-%{+YYYY.MM}"
}
}
启动logstash容器
docker run -d --restart=always -p 5044:5044 -p 9600:9600 --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 -v /opt/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml -v /opt/logstash/conf.d:/usr/share/logstash/config/conf.d --name logstash logstash:7.11.1
docker run -d --restart=always \
-p 5044:5044 -p 9600:9600 \
--log-driver json-file --log-opt max-size=100m --log-opt max-file=2 \
-v /opt/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml \
-v /opt/logstash/conf.d:/usr/share/logstash/config/conf.d \
--name logstash logstash:7.11.1
在kibana中查看是否创建了system-syslog-YYYY.MM索引,可以看到创建成功了。
八、安装filebeat
注意安装自己对应的版本,我这里都是用的7.11.1版本
docker pull docker.elastic.co/beats/filebeat:7.11.1
创建filebeat配置目录
mkdir /opt/filebeat
在/opt/filebeat下,创建filebeat.yml文件
#=========================== Filebeat inputs =============================
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["192.168.168.160:9200"]
启动filebeat服务
docker run --name filebeat \
-v /var/log/:/var/log/:ro \
-v /opt/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml \
-d docker.elastic.co/beats/filebeat:7.11.1
查看filebeat模板创建的索引
修改output为logstash
#=========================== Filebeat inputs =============================
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
#-------------------------- Logstash output ------------------------------
output.logstash:
# Array of hosts to connect to.
hosts: ["192.168.168.160:5044"]
修改/opt/logstash/conf.d/syslog.conf文件
input {
beats {
port => 5044
}
}
output {
elasticsearch {
# 定义es服务器的ip
hosts => ["192.168.168.160:9200"]
# 定义索引
index => "filebeat-system-syslog-%{+YYYY.MM}"
}
}
重新启动logstash和filebeat,查看是否有filebeat-system-syslog-*这种类型的索引。
九、安装Kafka
十、配置filebeat output为kafka,logstash input为kafka
编辑 filebeat.yml
filebeat.inputs:
- type: log
paths:
- /var/log/*.log
output.kafka:
hosts: ["192.168.168.160:9092"]
topic: "log_topic"
编辑/opt/logstash/conf.d/syslog.conf
input {
kafka {
bootstrap_servers => ["192.168.168.160:9092"]
group_id => "es-kafka"
topics => ["log_topic"]
codec => "json"
}
}
filter {
}
output {
elasticsearch {
hosts => ["192.168.168.160:9200"]
index => "kafka-%{+YYYY.MM.dd}"
}
}
重新启动filebeat和logstash,查看是否创建了索引kafka-*
十一、总结
ELK的架构图
一般来说数据流动是Filebeat对日志文件进行搜集,然后给到Kafka,再给到Logstash过滤,然后存到Elasticsearch中,最后在Kibana的可视化界面进行搜索。
kibana中查看的话,可以创建索引模式来进行搜索
然后在discover中可以查看
如果遇到一些没有权限的问题,给文件夹或者文件chmod或者chown都可以解决。
好了,ELK的介绍就到这里了,都去试试吧,docker安装还是超级快的。哈哈哈
更多推荐
所有评论(0)