详解容器部署ELK7.10,适用于生产

 一、elk架构简介

成都创新互联公司制作网站网页找三站合一网站制作公司,专注于网页设计,网站制作、成都网站建设,网站设计,企业网站搭建,网站开发,建网站业务,680元做网站,已为上1000+服务,成都创新互联公司网站建设将一如既往的为我们的客户提供最优质的网站建设、网络营销推广服务!

  • 首先 logstash 具有日志采集、过滤、筛选等功能,功能完善但同时体量也会比较大,消耗系统资源自然也多。filebeat作为一个轻量级日志采集工具,虽然没有过滤筛选功能,但是仅仅部署在应用服务器作为我们采集日志的工具可以是说最好的选择。但我们有些时候可能又需要logstash的过滤筛选功能,所以我们在采集日志时用filebeat,然后交给logstash过滤筛选。
  • 其次,logstash的吞吐量是有限的,一旦短时间内filebeat传过来的日志过多会产生堆积和堵塞,对日志的采集也会受到影响,所以在filebeat与logstash中间又加了一层kafka消息队列来缓存或者说解耦,当然redis也是可以的。这样当众多filebeat节点采集大量日志直接放到kafka中,logstash慢慢的进行消费,两边互不干扰。
  • 至于zookeeper,分布式服务管理神器,监控管理kafka的节点注册,topic管理等,同时弥补了kafka集群节点对外界无法感知的问题,kafka实际已经自带了zookeeper,这里将会使用独立的zookeeper进行管理,方便后期zookeeper集群的扩展。

二、环境

  • 阿里云ECS:5台部署ES节点,3台分别部署logstash、kafka、zookeeper和kibana等服务。
  • 阿里云ECS配置:5台 4核16G SSD磁盘。3台 4核16G SSD磁盘。都是 Centos7.8系统
  • 安装 docker 和 docker-compose
  • ELK版本7.10.1;zookeeper版本3.6.2;kafka版本2.13-2.6.0;

三、系统参数优化

 
 
 
 
  1. # 最大用户打开进程数 
  2. $ vim /etc/security/limits.d/20-nproc.conf 
  3.  
  4. *           soft   nproc       65535 
  5. *           hard   nproc       65535 
  6.  
  7. # 优化内核,用于 docker 支持 
  8. $ modprobe br_netfilter 
  9. $ cat <  /etc/sysctl.d/k8s.conf 
  10. net.bridge.bridge-nf-call-ip6tables = 1 
  11. net.bridge.bridge-nf-call-iptables = 1 
  12. net.ipv4.ip_forward = 1 
  13. EOF 
  14. $ sysctl -p /etc/sysctl.d/k8s.conf 
  15.  
  16. # 优化内核,对 es 支持 
  17. $ echo 'vm.max_map_count=262144' >> /etc/sysctl.conf 
  18.  
  19. # 生效配置 
  20. $ sysctl -p 

四、部署 docker 和 docker-compose

部署 docker

 
 
 
 
  1. # 安装必要的一些系统工具 
  2. $ yum install -y yum-utils device-mapper-persistent-data lvm2 
  3.  
  4. # 添加软件源信息 
  5. $ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
  6.  
  7. # 更新并安装 Docker-CE 
  8. $ yum makecache fast 
  9. $ yum -y install docker-ce 
  10.  
  11. # 配置docker 
  12. $ systemctl enable docker 
  13. $ systemctl start docker 
  14. $ vim /etc/docker/daemon.json 
  15. {"data-root": "/var/lib/docker", "bip": "10.50.0.1/16", "default-address-pools": [{"base": "10.51.0.1/16", "size": 24}], "registry-mirrors": ["https://4xr1qpsp.mirror.aliyuncs.com"], "log-opts": {"max-size":"500m", "max-file":"3"}} 
  16. $ sed  -i '/ExecStart=/i ExecStartPost=\/sbin\/iptables -P FORWARD ACCEPT' /usr/lib/systemd/system/docker.service 
  17. $ systemctl enable docker.service 
  18. $ systemctl daemon-reload 
  19. $ systemctl restart docker 

部署 docker-compose

 
 
 
 
  1. # 安装 docker-compose 
  2. $ sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 
  3. $ chmod +x /usr/local/bin/docker-compose 

五、部署 ES

es-master1 操作

 
 
 
 
  1. # 创建 es 目录 
  2. $ mkdir /data/ELKStack 
  3. $ mkdir elasticsearch elasticsearch-data elasticsearch-plugins 
  4.  
  5. # 容器es用户 uid 和 gid 都是 1000 
  6. $ chown 1000.1000 elasticsearch-data elasticsearch-plugins 
  7.  
  8. # 临时启动一个es 
  9. $ docker run --name es-test -it --rm docker.elastic.co/elasticsearch/elasticsearch:7.10.1 bash 
  10.  
  11. # 生成证书,证书有效期10年,证书输入的密码这里为空 
  12. $ bin/elasticsearch-certutil ca --days 3660 
  13. $ bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 --days 3660 
  14.  
  15. # 打开新的窗口,拷贝生成的证书 
  16. $ cd /data/ELKStack/elasticsearch 
  17. $ mkdir es-p12 
  18. $ docker cp es-test:/usr/share/elasticsearch/elastic-certificates.p12 ./es-p12 
  19. $ docker cp es-test:/usr/share/elasticsearch/elastic-stack-ca.p12 ./es-p12 
  20. $ chown -R 1000.1000 ./es-p12 
  21.  
  22. # 创建 docker-compose.yml 
  23. $ vim docker-compose.yml 
  24.  
  25. version: '2.2' 
  26. services: 
  27.   elasticsearch: 
  28.     image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1 
  29.     container_name: es01 
  30.     environment: 
  31.       - cluster.name=es-docker-cluster 
  32.       - cluster.initial_master_nodes=es01,es02,es03 
  33.       - bootstrap.memory_lock=true 
  34.       - "ES_JAVA_OPTS=-Xms10000m -Xmx10000m" 
  35.     ulimits: 
  36.       memlock: 
  37.         soft: -1 
  38.         hard: -1 
  39.       nofile: 
  40.         soft: 65536 
  41.         hard: 65536 
  42.     mem_limit: 13000m 
  43.     cap_add: 
  44.       - IPC_LOCK 
  45.     restart: always 
  46.     # 设置 docker host 网络模式 
  47.     network_mode: "host" 
  48.     volumes: 
  49.        - /data/ELKStack/elasticsearch-data:/usr/share/elasticsearch/data 
  50.        - /data/ELKStack/elasticsearch-plugins:/usr/share/elasticsearch/plugins 
  51.        - /data/ELKStack/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml 
  52.        - /data/ELKStack/elasticsearch/es-p12:/usr/share/elasticsearch/config/es-p12 
  53.  
  54. # 创建 elasticsearch.yml 配置文件 
  55. $ vim elasticsearch.yml 
  56.  
  57. cluster.name: "es-docker-cluster" 
  58. node.name: "es01" 
  59. network.host: 0.0.0.0 
  60.  
  61. node.master: true 
  62. node.data: true 
  63.  
  64. discovery.zen.minimum_master_nodes: 2 
  65. http.port: 9200 
  66. transport.tcp.port: 9300 
  67.  
  68. # 如果是多节点es,通过ping来健康检查 
  69. discovery.zen.ping.unicast.hosts: ["172.20.166.25:9300", "172.20.166.24:9300", "172.20.166.22:9300", "172.20.166.23:9300", "172.20.166.26:9300"] 
  70. discovery.zen.fd.ping_timeout: 120s 
  71. discovery.zen.fd.ping_retries: 6 
  72. discovery.zen.fd.ping_interval: 10s 
  73.  
  74. cluster.info.update.interval: 1m 
  75. indices.fielddata.cache.size:  20% 
  76. indices.breaker.fielddata.limit: 40% 
  77. indices.breaker.request.limit: 40% 
  78. indices.breaker.total.limit: 70% 
  79. indices.memory.index_buffer_size: 20% 
  80. script.painless.regex.enabled: true 
  81.  
  82. # 磁盘分片分配 
  83. cluster.routing.allocation.disk.watermark.low: 100gb 
  84. cluster.routing.allocation.disk.watermark.high: 50gb 
  85. cluster.routing.allocation.disk.watermark.flood_stage: 30gb 
  86.  
  87. # 本地数据分片恢复配置 
  88. gateway.recover_after_nodes: 3 
  89. gateway.recover_after_time: 5m 
  90. gateway.expected_nodes: 3 
  91. cluster.routing.allocation.node_initial_primaries_recoveries: 8 
  92. cluster.routing.allocation.node_concurrent_recoveries: 2 
  93.  
  94. # 允许跨域请求 
  95. http.cors.enabled: true 
  96. http.cors.allow-origin: "*" 
  97. http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type 
  98.  
  99. # 开启xpack 
  100. xpack.security.enabled: true 
  101. xpack.monitoring.collection.enabled: true 
  102.  
  103. # 开启集群中https传输 
  104. xpack.security.transport.ssl.enabled: true 
  105. xpack.security.transport.ssl.verification_mode: certificate 
  106. xpack.security.transport.ssl.keystore.path: es-p12/elastic-certificates.p12 
  107. xpack.security.transport.ssl.truststore.path: es-p12/elastic-certificates.p12 
  108.  
  109. # 把 es 配置使用 rsync 同步到其它 es 节点 
  110. $ rsync -avp -e ssh /data/ELKStack 172.20.166.24:/data/ 
  111. $ rsync -avp -e ssh /data/ELKStack 172.20.166.22:/data/ 
  112. $ rsync -avp -e ssh /data/ELKStack 172.20.166.23:/data/ 
  113. $ rsync -avp -e ssh /data/ELKStack 172.20.166.26:/data/ 
  114.  
  115. # 启动 es 
  116. $ docker-compose up -d 
  117.  
  118. # 查看 es 
  119. $ docker-compose ps 

es-master2 操作

 
 
 
 
  1. $ cd /data/ELKStack/elasticsearch 
  2.  
  3. # 修改 docker-compose.yml elasticsearch.yml 两个配置 
  4. $ sed -i 's/es01/es02/g' docker-compose.yml elasticsearch.yml 
  5.  
  6. # 启动 es 
  7. $ docker-compose up -d 

es-master3 操作

 
 
 
 
  1. $ cd /data/ELKStack/elasticsearch 
  2.  
  3. # 修改 docker-compose.yml elasticsearch.yml 两个配置 
  4. $ sed -i 's/es01/es03/g' docker-compose.yml elasticsearch.yml 
  5.  
  6. # 启动 es 
  7. $ docker-compose up -d 

es-data1 操作

 
 
 
 
  1. $ cd /data/ELKStack/elasticsearch 
  2.  
  3. # 修改 docker-compose.yml elasticsearch.yml 两个配置 
  4. $ sed -i 's/es01/es04/g' docker-compose.yml elasticsearch.yml 
  5.  
  6. # 不做为 es master 节点,只做数据节点 
  7. $ sed -i 's/node.master: true/node.master: false/g' elasticsearch.yml 
  8.  
  9. # 启动 es 
  10. $ docker-compose up -d 

es-data2 操作

 
 
 
 
  1. $ cd /data/ELKStack/elasticsearch 
  2.  
  3. # 修改 docker-compose.yml elasticsearch.yml 两个配置 
  4. $ sed -i 's/es01/es05/g' docker-compose.yml elasticsearch.yml 
  5.  
  6. # 不做为 es master 节点,只做数据节点 
  7. $ sed -i 's/node.master: true/node.master: false/g' elasticsearch.yml 
  8.  
  9. # 启动 es 
  10. $ docker-compose up -d 

设置 es 访问账号

 
 
 
 
  1. # es-master1 操作 
  2. $ docker exec -it es01 bash 
  3.  
  4. # 设置 elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user 等密码 
  5. # 密码都设置为 elastic123,这里只是举例,具体根据需求设置 
  6. $ ./bin/elasticsearch-setup-passwords interactive 

六、部署 Kibana

logstash3 操作

 
 
 
 
  1. $ mkdir -p /data/ELKStack/kibana 
  2. $ cd /data/ELKStack/kibana 
  3.  
  4. # 创建 kibana 相关目录,用于容器挂载 
  5. $ mkdir config data plugins 
  6. $ chown 1000.1000 config data plugins 
  7.  
  8. # 创建 docker-compose.yml 
  9. $ vim docker-compose.yml 
  10.  
  11. version: '2' 
  12. services: 
  13.   kibana: 
  14.     image: docker.elastic.co/kibana/kibana:7.10.1 
  15.     container_name: kibana 
  16.     restart: always 
  17.     network_mode: "bridge" 
  18.     mem_limit: 2000m 
  19.     environment: 
  20.       SERVER_NAME: kibana.example.com 
  21.     ports: 
  22.       - "5601:5601" 
  23.     volumes: 
  24.        - /data/ELKStack/kibana/config:/usr/share/kibana/config 
  25.        - /data/ELKStack/kibana/data:/usr/share/kibana/data 
  26.        - /data/ELKStack/kibana/plugins:/usr/share/kibana/plugins 
  27.  
  28. # 创建 kibana.yml 
  29. $ vim config/kibana.yml 
  30.  
  31. server.name: kibana 
  32. server.host: "0" 
  33. elasticsearch.hosts: ["http://172.20.166.25:9200","http://172.20.166.24:9200","http://172.20.166.22:9200"] 
  34. elasticsearch.username: "kibana" 
  35. elasticsearch.password: "elastic123" 
  36. monitoring.ui.container.elasticsearch.enabled: true 
  37. xpack.security.enabled: true 
  38. xpack.encryptedSavedObjects.encryptionKey: encryptedSavedObjects1234567890

    网站名称:详解容器部署ELK7.10,适用于生产
    本文路径:http://www.shufengxianlan.com/qtweb/news7/230157.html

    网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

    广告

    声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联