说一个,排除了千难万险,最终实现目标后,精简、升华了搭建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下来。