一、安装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

docker方式安装kafka_傲傲娇的博客-CSDN博客

十、配置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安装还是超级快的。哈哈哈

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐