docker部署EFK,收集容器日志的超高效方案

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

对于使用Docker部署EFKElasticsearch, Fluentd, Kibana)的步骤如下: 1. 安装DockerDocker Compose:确保你的系统上已经安装了DockerDocker Compose。 2. 创建docker-compose.yml文件:在你的工作目录下创建一个名为docker-compose.yml的文件,并将以下内容复制到文件中: ```yaml version: '3' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.10.0 container_name: elasticsearch environment: - discovery.type=single-node ports: - 9200:9200 volumes: - esdata:/usr/share/elasticsearch/data fluentd: image: fluent/fluentd:latest container_name: fluentd volumes: - ./fluentd/conf:/fluentd/etc - ./fluentd/logs:/fluentd/log ports: - 24224:24224 - 24224:24224/udp kibana: image: docker.elastic.co/kibana/kibana:7.10.0 container_name: kibana ports: - 5601:5601 environment: - ELASTICSEARCH_HOSTS=http://elasticsearch:9200 volumes: esdata: ``` 3. 创建Fluentd配置文件:在与docker-compose.yml文件相同的目录下创建一个名为fluentd的文件夹,并在其中创建一个名为conf的文件夹。然后,在conf文件夹中创建一个名为fluent.conf的文件,并将以下内容复制到文件中: ``` <source> @type forward port 24224 bind 0.0.0.0 </source> <match **> @type elasticsearch hosts elasticsearch:9200 logstash_format true logstash_prefix fluentd include_tag_key true flush_interval 5s </match> ``` 4. 启动EFK容器:在终端中,进入到包含docker-compose.yml文件的目录,并运行以下命令启动EFK容器: ``` docker-compose up -d ``` 这将启动Elasticsearch、Fluentd和Kibana容器,并将它们连接在一起。 5. 访问Kibana界面:在浏览器中访问`http://localhost:5601`,你应该可以看到Kibana的登录页面。默认情况下,用户名和密码均为`elastic`。 现在,你已经成功地使用Docker部署EFK。你可以配置Fluentd来收集和发送日志Elasticsearch,并使用Kibana进行日志的可视化和分析。请注意,这只是一个简单的示例配置,你可以根据自己的需求进行进一步的配置和定制。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值