说一个,排除了千难万险,最终实现目标后,精简、升华了搭建EFK的经验。(实在是不想分享出来啊,虐我千百遍,我却只能感恩戴德的说谢谢。)
EFK部署,初学者更多的听说的是ELK,我最初的尝试就是从ELK开始的,但最后结合自身的生产环境来说,我更倾向于用filebeat去替换logstash。不仅可以跨服务器使用,随建随拆,配置也简单。

用docker部署,创建几个目录,然后执行几条命令就OK了

先上命令吧

docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -v /usr/local/src/elk/es/data:/usr/share/elasticsearch/data -v /usr/local/src/elk/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml --privileged=true docker.elastic.co/elasticsearch/elasticsearch:7.8.0

docker run -d --name filebeat --user=root -v /var/lib/docker/containers:/var/lib/docker/containers --log-driver json-file docker.elastic.co/beats/filebeat:7.8.0

docker run -d -p 5601:5601 --name=kibana -v /usr/local/src/elk/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml docker.elastic.co/kibana/kibana:7.8.0

看完命令,我想你就知道要建那些目录和那些文件了吧,照着命令去新建文件,不会丢失自我。

elasticsearch

~: mkdir /usr/local/src/elk/es/
~: cd /usr/local/src/elk/es/
~: mkdir config data
~: cd config
~: vim elasticsearch.yml
cluster.name: "docker-cluster"
network.host: 0.0.0.0
xpack.security.enabled: true
http.cors.enabled: true
http.cors.allow-origin: "*"

别慌,还没结束,看到这个没有xpack.security.enabled: true,打开了账密的安全模式哦,所以还有一个操作,就是要去创建账密。

~: docker exec -it es bash
bin/elasticsearch-setup-passwords interactive    #进入容器直接执行这条命令,下面是输入账密,建议密码都设置成一样的,方便。

Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]y

Enter password for [elastic]: 
Reenter password for [elastic]: 
Enter password for [apm_system]: 
Reenter password for [apm_system]: 
Enter password for [kibana_system]: 
Reenter password for [kibana_system]: 
Enter password for [logstash_system]: 
Reenter password for [logstash_system]: 
Enter password for [beats_system]: 
Reenter password for [beats_system]: 
Enter password for [remote_monitoring_user]: 
Reenter password for [remote_monitoring_user]: 
Changed password for user [apm_system]
Changed password for user [kibana_system]
Changed password for user [kibana]
Changed password for user [logstash_system]
Changed password for user [beats_system]
Changed password for user [remote_monitoring_user]
Changed password for user [elastic]

部署elasticsearch的时候会有个内存权限的问题,会导致服务起不来,修改一下sysctl.conf即可,同时还要赋予/usr/local/src/elk/es/data/权限

~: chmod 777 /usr/local/src/elk/es/data/
~: vim /etc/sysctl.conf
vm.max_map_count=262144      #添加配置
~: sysctl -p
重新加载后在重启一下es就行了

filebeat
这个不用创建目录,不用创建文档,而且跨服务器都没事,就是这么任性。
直接执行上面创建容器的命令,然后进入容器。先不要慌,这里要在容器中装个vim

yum -y install vim

然后编辑filebeat.yml

~: vim filebeat.yml
filebeat.config:
  modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false

processors:
  - add_cloud_metadata: ~
  - add_docker_metadata: ~

filebeat.inputs:
  - type: docker
    containers:
      path: "/var/lib/docker/containers"
      json.keys_under_root: true
      ids:
        - "*"

output.elasticsearch:
  hosts: '***.***.***.***:9200'
  username: 'elastic'
  password: '********'

setup.kibana:
  host: "***.***.***.***:5601"

编辑好后,在容器中执行
filebeat setup 创建 Kibana上的 Index Pattern 和 Dashboard
重启filebeat容器

kibana

~: mkdir /usr/local/src/elk/kibana
~: cd /usr/local/src/elk/kibana
~: mkdir config
~: cd config
~: vim kibana.yml
server.name: kibana
server.host: "0.0.0.0"
elasticsearch.hosts: [ "http://***.***.***.***:9200" ]
elasticsearch.username: elastic
elasticsearch.password: ********
xpack.monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: "zh-CN"      #汉化

好了,没了,最后把kibana容器启动起来就行,kibana的运行比较慢,打开网站的时候多等一会,在刷新,导入日志的时候,超时也不用管,多等会就行。
如果只是一般的服务日志,还好一点,这个是针对容器内的日志,中间也是尝试了不只多少的方法,没想到最终的解决方案竟然是这么的简单,剩下的就是使用和优化了。对了,pull镜像的时候慢,可以提前先把三个镜像pull下来。