一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - 編程技術 - 詳解容器部署ELK7.10,適用于生產

詳解容器部署ELK7.10,適用于生產

2021-01-08 23:31YP小站 編程技術

本篇給大家介紹容器部署ELK7.10,適用于生產,希望對你有所幫助。

 一、elk架構簡介

詳解容器部署ELK7.10,適用于生產
  • 首先 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;

詳解容器部署ELK7.10,適用于生產

三、系統參數優化

  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 <<EOF >  /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: encryptedSavedObjects12345678909876543210 
  39. xpack.security.encryptionKey: encryptionKeysecurity12345678909876543210 
  40. xpack.reporting.encryptionKey: encryptionKeyreporting12345678909876543210 
  41. i18n.locale: "zh-CN" 
  42.  
  43. # 啟動 kibana 
  44. $ docker-compose up -d 

七、部署 Zookeeper

logstash1 操作

  1. # 創建 zookeeper 目錄 
  2. $ mkdir /data/ELKStack/zookeeper 
  3. $ cd /data/ELKStack/zookeeper 
  4. $ mkdir data datalog 
  5. $ chown 1000.1000 data datalog 
  6.  
  7. # 創建 docker-compose.yml 
  8. $ vim docker-compose.yml 
  9.  
  10. version: '2' 
  11. services: 
  12.   zoo1: 
  13.     image: zookeeper:3.6.2 
  14.     restart: always 
  15.     hostname: zoo1 
  16.     container_name: zoo1 
  17.     network_mode: "bridge" 
  18.     mem_limit: 2000m 
  19.     ports: 
  20.       - 2181:2181 
  21.       - 3888:3888 
  22.       - 2888:2888 
  23.     volumes: 
  24.       - /data/ELKStack/zookeeper/data:/data 
  25.       - /data/ELKStack/zookeeper/datalog:/datalog 
  26.       - /data/ELKStack/zookeeper/zoo.cfg:/conf/zoo.cfg 
  27.     environment: 
  28.       ZOO_MY_ID: 1  # 表示 ZK服務的 id, 它是1-255 之間的整數, 必須在集群中唯一 
  29.       ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181 server.2=172.20.166.28:2888:3888;2181 server.3=172.20.166.29:2888:3888;2181 
  30.       # ZOOKEEPER_CLIENT_PORT: 2181 
  31.  
  32. # 創建 zoo.cfg 配置 
  33. $ vim zoo.cfg 
  34.  
  35. tickTime=2000 
  36. initLimit=10 
  37. syncLimit=5 
  38. dataDir=/data 
  39. dataLogDir=/datalog 
  40. autopurge.snapRetainCount=3 
  41. autopurge.purgeInterval=1 
  42. maxClientCnxns=60 
  43. server.1= 0.0.0.0:2888:3888;2181 
  44. server.2= 172.20.166.28:2888:3888;2181 
  45. server.3= 172.20.166.29:2888:3888;2181 
  46.  
  47. # 拷貝配置到 logstash2 logstash3 機器上 
  48. $ rsync -avp -e ssh /data/ELKStack/zookeeper 172.20.166.28:/data/ELKStack/ 
  49. $ rsync -avp -e ssh /data/ELKStack/zookeeper 172.20.166.29:/data/ELKStack/ 
  50.  
  51. # 啟動 zookeeper 
  52. $ docker-compose up -d 

logstash2 操作

  1. $ cd /data/ELKStack/zookeeper 
  2.  
  3. # 修改 docker-compose.yml 文件 
  4. $ vim docker-compose.yml 
  5.  
  6. version: '2' 
  7. services: 
  8.   zoo2: 
  9.     image: zookeeper:3.6.2 
  10.     restart: always 
  11.     hostname: zoo2 
  12.     container_name: zoo2 
  13.     network_mode: "bridge" 
  14.     mem_limit: 2000m 
  15.     ports: 
  16.       - 2181:2181 
  17.       - 3888:3888 
  18.       - 2888:2888 
  19.     volumes: 
  20.       - /data/ELKStack/zookeeper/data:/data 
  21.       - /data/ELKStack/zookeeper/datalog:/datalog 
  22.       - /data/ELKStack/zookeeper/zoo.cfg:/conf/zoo.cfg 
  23.     environment: 
  24.       ZOO_MY_ID: 2  # 表示 ZK服務的 id, 它是1-255 之間的整數, 必須在集群中唯一 
  25.       ZOO_SERVERS: server.1=172.20.166.27:2888:3888;2181 server.2=0.0.0.0:2888:3888;2181 server.3=172.20.166.29:2888:3888;2181 
  26.       # ZOOKEEPER_CLIENT_PORT: 2181 
  27.  
  28. # 修改 zoo.cfg 
  29. $ vim zoo.cfg 
  30.  
  31. tickTime=2000 
  32. initLimit=10 
  33. syncLimit=5 
  34. dataDir=/data 
  35. dataLogDir=/datalog 
  36. autopurge.snapRetainCount=3 
  37. autopurge.purgeInterval=1 
  38. maxClientCnxns=60 
  39. server.1= 172.20.166.27:2888:3888;2181 
  40. server.2= 0.0.0.0:2888:3888;2181 
  41. server.3= 172.20.166.29:2888:3888;2181 
  42.  
  43. # 啟動 zookeeper 
  44. $ docker-compose up -d 

logstash3 操作

  1. $ cd /data/ELKStack/zookeeper 
  2.  
  3. # 修改 docker-compose.yml 文件 
  4. $ vim docker-compose.yml 
  5.  
  6. version: '2' 
  7. services: 
  8.   zoo3: 
  9.     image: zookeeper:3.6.2 
  10.     restart: always 
  11.     hostname: zoo3 
  12.     container_name: zoo3 
  13.     network_mode: "bridge" 
  14.     mem_limit: 2000m 
  15.     ports: 
  16.       - 2181:2181 
  17.       - 3888:3888 
  18.       - 2888:2888 
  19.     volumes: 
  20.       - /data/ELKStack/zookeeper/data:/data 
  21.       - /data/ELKStack/zookeeper/datalog:/datalog 
  22.       - /data/ELKStack/zookeeper/zoo.cfg:/conf/zoo.cfg 
  23.     environment: 
  24.       ZOO_MY_ID: 3  # 表示 ZK服務的 id, 它是1-255 之間的整數, 必須在集群中唯一 
  25.       ZOO_SERVERS: server.1=172.20.166.27:2888:3888;2181 server.2=172.20.166.28:2888:3888;2181 server.3=0.0.0.0:2888:3888;2181 
  26.       # ZOOKEEPER_CLIENT_PORT: 2181 
  27.  
  28. # 修改 zoo.cfg 
  29. $ vim zoo.cfg 
  30.  
  31. tickTime=2000 
  32. initLimit=10 
  33. syncLimit=5 
  34. dataDir=/data 
  35. dataLogDir=/datalog 
  36. autopurge.snapRetainCount=3 
  37. autopurge.purgeInterval=1 
  38. maxClientCnxns=60 
  39. server.1= 172.20.166.27:2888:3888;2181 
  40. server.2= 172.20.166.28:2888:3888;2181 
  41. server.3= 0.0.0.0:2888:3888;2181 
  42.  
  43. # 啟動 zookeeper 
  44. $ docker-compose up -d 
  45.  
  46. # 操作 zookeeper 
  47. $ docker run -it zoo3 bash 
  48. $ zkCli.sh -server 172.20.166.27:2181,172.20.166.28:2181,172.20.166.29:2181 

八、部署 Kafka

logstash1 操作

  1. # 創建 kafka 目錄 
  2. $ mkdir -p /data/ELKStack/kafka 
  3. $ cd /data/ELKStack/kafka 
  4.  
  5. # 創建數據目錄,用于存儲kafka容器數據 
  6. $ mkdir data 
  7.  
  8. # 把kafka配置拷貝到宿主機上 
  9. $ docker run --name kafka-test -it --rm wurstmeister/kafka:2.13-2.6.0 bash 
  10. $ cd /opt/kafka 
  11. $ tar zcvf /tmp/config.tar.gz config 
  12.  
  13. # 打開一個新的窗口 
  14. $ docker cp kafka-test:/tmp/config.tar.gz ./ 
  15.  
  16. # 解壓配置文件 
  17. $ tar xf config.tar.gz 
  18.  
  19. # 創建 docker-compose.yml 
  20. $ vim docker-compose.yml 
  21.  
  22. version: '2' 
  23.  
  24. services: 
  25.   kafka1: 
  26.     image: wurstmeister/kafka:2.13-2.6.0 
  27.     restart: always 
  28.     hostname: kafka1 
  29.     container_name: kafka1 
  30.     network_mode: "bridge" 
  31.     mem_limit: 5120m 
  32.     ports: 
  33.     - 9092:9092 
  34.     - 9966:9966 
  35.     environment: 
  36.       KAFKA_BROKER_ID: 1 
  37.       KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://172.20.166.27:9092       # 宿主機的IP地址而非容器的IP,及暴露出來的端口 
  38.       KAFKA_ADVERTISED_HOST_NAME: 172.20.166.27                        # 外網訪問地址 
  39.       KAFKA_ADVERTISED_PORT: 9092                                      # 端口 
  40.       KAFKA_ZOOKEEPER_CONNECT: 172.20.166.27:2181,172.20.166.28:2181,172.20.166.29:2181           # 連接的zookeeper服務及端口 
  41.       KAFKA_JMX_OPTS: "-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=172.20.166.27 -Dcom.sun.management.jmxremote.rmi.port=9966" 
  42.       JMX_PORT: 9966 # kafka需要監控broker和topic的數據的時候,是需要開啟jmx_port的 
  43.       KAFKA_HEAP_OPTS: "-Xmx4096M -Xms4096M" 
  44.     volumes: 
  45.     - /data/ELKStack/kafka/data:/kafka                    # kafka數據文件存儲目錄 
  46.     - /data/ELKStack/kafka/config:/opt/kafka/config 
  47.  
  48. # 優化 kafka server.properties 配置 
  49. $ vim config/server.properties 
  50.  
  51. # 調大socket,防止報錯 
  52. socket.send.buffer.bytes=1024000 
  53. socket.receive.buffer.bytes=1024000 
  54. socket.request.max.bytes=1048576000 
  55.  
  56. # topic 數據保留多久,默認168小時(7day) 
  57. log.retention.hours=72 
  58. log.cleanup.policy=delete 
  59.  
  60. # 拷貝配置到 logstash2 logstash3 機器上 
  61. $ rsync -avp -e ssh /data/ELKStack/kafka 172.20.166.28:/data/ELKStack/ 
  62. $ rsync -avp -e ssh /data/ELKStack/kafka 172.20.166.29:/data/ELKStack/ 
  63.  
  64. # 啟動 kafka 
  65. $ docker-compose up -d 

logstash2 操作

  1. $ cd /data/ELKStack/kafka 
  2.  
  3. # 修改 docker-compose.yml 文件 
  4. $ vim docker-compose.yml 
  5.  
  6. version: '2' 
  7.  
  8. services: 
  9.   kafka2: 
  10.     image: wurstmeister/kafka:2.13-2.6.0 
  11.     restart: always 
  12.     hostname: kafka2 
  13.     container_name: kafka2 
  14.     network_mode: "bridge" 
  15.     mem_limit: 5120m 
  16.     ports: 
  17.     - 9092:9092 
  18.     - 9966:9966 
  19.     environment: 
  20.       KAFKA_BROKER_ID: 2 
  21.       KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://172.20.166.28:9092       # 宿主機的IP地址而非容器的IP,及暴露出來的端口 
  22.       KAFKA_ADVERTISED_HOST_NAME: 172.20.166.28                        # 外網訪問地址 
  23.       KAFKA_ADVERTISED_PORT: 9092                                      # 端口 
  24.       KAFKA_ZOOKEEPER_CONNECT: 172.20.166.27:2181,172.20.166.28:2181,172.20.166.29:2181           # 連接的zookeeper服務及端口 
  25.       KAFKA_JMX_OPTS: "-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=172.20.166.28 -Dcom.sun.management.jmxremote.rmi.port=9966" 
  26.       JMX_PORT: 9966  # kafka需要監控broker和topic的數據的時候,是需要開啟jmx_port的 
  27.       KAFKA_HEAP_OPTS: "-Xmx4096M -Xms4096M" 
  28.     volumes: 
  29.     - /data/ELKStack/kafka/data:/kafka                    # kafka數據文件存儲目錄 
  30.     - /data/ELKStack/kafka/config:/opt/kafka/config 
  31.  
  32. # 啟動 kafka 
  33. $ docker-compose up -d 

logstash3 操作

  1. $ cd /data/ELKStack/kafka 
  2.  
  3. # 修改 docker-compose.yml 文件 
  4. $ vim docker-compose.yml 
  5.  
  6. version: '2' 
  7.  
  8. services: 
  9.   kafka3: 
  10.     image: wurstmeister/kafka:2.13-2.6.0 
  11.     restart: always 
  12.     hostname: kafka3 
  13.     container_name: kafka3 
  14.     network_mode: "bridge" 
  15.     mem_limit: 5120m 
  16.     ports: 
  17.     - 9092:9092 
  18.     - 9966:9966 
  19.     environment: 
  20.       KAFKA_BROKER_ID: 3 
  21.       KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://172.20.166.29:9092       # 宿主機的IP地址而非容器的IP,及暴露出來的端口 
  22.       KAFKA_ADVERTISED_HOST_NAME: 172.20.166.29                        # 外網訪問地址 
  23.       KAFKA_ADVERTISED_PORT: 9092                                      # 端口 
  24.       KAFKA_ZOOKEEPER_CONNECT: 172.20.166.27:2181,172.20.166.28:2181,172.20.166.29:2181           # 連接的zookeeper服務及端口 
  25.       KAFKA_JMX_OPTS: "-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=172.20.166.29 -Dcom.sun.management.jmxremote.rmi.port=9966" 
  26.       JMX_PORT: 9966  # kafka需要監控broker和topic的數據的時候,是需要開啟jmx_port的 
  27.       KAFKA_HEAP_OPTS: "-Xmx4096M -Xms4096M" 
  28.     volumes: 
  29.     - /data/ELKStack/kafka/data:/kafka                    # kafka數據文件存儲目錄 
  30.     - /data/ELKStack/kafka/config:/opt/kafka/config 
  31.  
  32. # 啟動 kafka 
  33. $ docker-compose up -d 
  34.  
  35. # 部署 kafka-manager 管理 kafka 平臺 
  36. $ mkdir /data/ELKStack/kafka-manager 
  37. $ cd /data/ELKStack/kafka-manager 
  38. $ vim docker-compose.yml 
  39.  
  40. version: '3.6' 
  41. services: 
  42.   kafka_manager: 
  43.     restart: always 
  44.     container_name: kafa-manager 
  45.     hostname: kafka-manager 
  46.     network_mode: "bridge" 
  47.     mem_limit: 1024m 
  48.     image: hlebalbau/kafka-manager:3.0.0.5-7e7a22e 
  49.     ports: 
  50.       - "9000:9000" 
  51.     environment: 
  52.       ZK_HOSTS: "172.20.166.27:2181,172.20.166.28:2181,172.20.166.29:2181" 
  53.       APPLICATION_SECRET: "random-secret" 
  54.       KAFKA_MANAGER_AUTH_ENABLED: "true" 
  55.       KAFKA_MANAGER_USERNAME: admin 
  56.       KAFKA_MANAGER_PASSWORD: elastic123 
  57.       JMX_PORT: 9966 
  58.       TZ: "Asia/Shanghai" 
  59.  
  60. # 啟動 kafka-manager 
  61. $ docker-compose up -d 
  62.  
  63. # 訪問 http://172.20.166.29:9000 ,把上面創建的三臺 kafka 加入管理,這里不在闡述,網上很多配置教程 

九、部署 logstash

logstash1 操作

  1. $ mkdir /data/ELKStack/logstash 
  2. $ cd /data/ELKStack/logstash 
  3. $ mkdir config data 
  4. $ chown 1000.1000 config data 
  5.  
  6. # 創建 docker-compose.yml 
  7. $ vim docker-compose.yml 
  8.  
  9. version: '2' 
  10. services: 
  11.   logstash1: 
  12.     image: docker.elastic.co/logstash/logstash:7.10.1 
  13.     container_name: logstash1 
  14.     hostname: logstash1 
  15.     restart: always 
  16.     network_mode: "bridge" 
  17.     mem_limit: 4096m 
  18.     environment: 
  19.       TZ: "Asia/Shanghai" 
  20.     ports: 
  21.       - 5044:5044 
  22.     volumes: 
  23.       - /data/ELKStack/logstash/config:/config-dir 
  24.       - /data/ELKStack/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml 
  25.       - /data/ELKStack/logstash/data:/usr/share/logstash/data 
  26.       - /etc/localtime:/etc/localtime 
  27.     user: logstash 
  28.     command: bash -c "logstash -f /config-dir --config.reload.automatic" 
  29.  
  30. # 創建 logstash.yml 
  31. $ vim logstash.yml 
  32.  
  33. http.host: "0.0.0.0" 
  34. # 指發送到Elasticsearch的批量請求的大小,值越大,處理則通常更高效,但增加了內存開銷 
  35. pipeline.batch.size: 3000 
  36. # 指調整Logstash管道的延遲,過了該時間則logstash開始執行過濾器和輸出 
  37. pipeline.batch.delay: 200 
  38.  
  39. # 創建 logstash 規則配置 
  40. $ vim config/01-input.conf 
  41.  
  42. input {                                        # 輸入組件 
  43.     kafka {                                    # 從kafka消費數據 
  44.         bootstrap_servers => ["172.20.166.27:9092,172.20.166.28:9092,172.20.166.29:9092"
  45.         #topics => "%{[@metadata][topic]}"     # 使用kafka傳過來的topic 
  46.         topics_pattern => "elk-.*"             # 使用正則匹配topic 
  47.         codec => "json"                        # 數據格式 
  48.         consumer_threads => 3                  # 消費線程數量 
  49.         decorate_events => true                # 可向事件添加Kafka元數據,比如主題、消息大小的選項,這將向logstash事件中添加一個名為kafka的字段 
  50.         auto_offset_reset => "latest"          # 自動重置偏移量到最新的偏移量 
  51.         group_id => "logstash-node"            # 消費組ID,多個有相同group_id的logstash實例為一個消費組 
  52.         client_id => "logstash1"               # 客戶端ID 
  53.         fetch_max_wait_ms => "1000"            # 指當沒有足夠的數據立即滿足fetch_min_bytes時,服務器在回答fetch請求之前將阻塞的最長時間 
  54.   } 
  55.  
  56. $ vim config/02-output.conf 
  57.  
  58. output {                                       # 輸出組件 
  59.     elasticsearch { 
  60.         # Logstash輸出到es 
  61.         hosts => ["172.20.166.25:9200""172.20.166.24:9200""172.20.166.22:9200""172.20.166.23:9200""172.20.166.26:9200"
  62.         index => "%{[fields][source]}-%{+YYYY-MM-dd}"      # 直接在日志中匹配,索引會去掉elk 
  63.         # index => "%{[@metadata][topic]}-%{+YYYY-MM-dd}"  # 以日期建索引 
  64.         user => "elastic" 
  65.         password => "elastic123" 
  66.     } 
  67.     #stdout { 
  68.     #    codec => rubydebug 
  69.     #} 
  70.  
  71. $ vim config/03-filter.conf 
  72.  
  73. filter { 
  74.    # 當非業務字段時,無traceId則移除 
  75.    if ([message] =~ "traceId=null") {          # 過濾組件,這里只是展示,無實際意義,根據自己的業務需求進行過濾 
  76.       drop {} 
  77.    } 
  78.  
  79. # 拷貝配置到 logstash2 logstash3 機器上 
  80. $ rsync -avp -e ssh /data/ELKStack/logstash 172.20.166.28:/data/ELKStack/ 
  81. $ rsync -avp -e ssh /data/ELKStack/logstash 172.20.166.29:/data/ELKStack/ 
  82.  
  83. # 啟動 logstash 
  84. $ docker-compose up -d 

logstash2 操作

  1. $ cd /data/ELKStack/logstash 
  2. $ sed -i 's/logstash1/logstash2/g' docker-compose.yml 
  3. $ sed -i 's/logstash1/logstash2/g' config/01-input.conf 
  4.  
  5. # 啟動 logstash 
  6. $ docker-compose up -d 

logstash3 操作

  1. $ cd /data/ELKStack/logstash 
  2. $ sed -i 's/logstash1/logstash3/g' docker-compose.yml 
  3. $ sed -i 's/logstash1/logstash3/g' config/01-input.conf 
  4.  
  5. # 啟動 logstash 
  6. $ docker-compose up -d 

十、部署 filebeat

  1. # 配置 filebeat yum源,這里以 centos7 為例 
  2. $ rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch 
  3.  
  4. $ vim /etc/yum.repos.d/elastic.repo 
  5.  
  6. [elastic-7.x] 
  7. name=Elastic repository for 7.x packages 
  8. baseurl=https://artifacts.elastic.co/packages/7.x/yum 
  9. gpgcheck=1 
  10. gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch 
  11. enabled=1 
  12. autorefresh=1 
  13. type=rpm-md 
  14.  
  15. $ yum install -y filebeat-7.10.1 
  16. $ systemctl enable filebeat 
  17.  
  18. # 配置 
  19. $ cd /etc/filebeat/ 
  20. $ cp -a filebeat.yml filebeat.yml.old 
  21. $ echo > filebeat.yml 
  22.  
  23. # 以收集nginx訪問日志為例 
  24. $ vim filebeat.yml 
  25.  
  26. filebeat.inputs:                   # inputs為復數,表名type可以有多個 
  27. - type: log                        # 輸入類型 
  28.   access: 
  29.   enabled: true                    # 啟用這個type配置 
  30.   json.keys_under_root: true       # 默認這個值是FALSE的,也就是我們的json日志解析后會被放在json鍵上。設為TRUE,所有的keys就會被放到根節點 
  31.   json.overwrite_keys: true        # 是否要覆蓋原有的key,這是關鍵配置,將keys_under_root設為TRUE后,再將overwrite_keys也設為TRUE,就能把filebeat默認的key值給覆蓋 
  32.   max_bytes: 20480                 # 單條日志的大小限制,建議限制(默認為10M,queue.mem.events * max_bytes 將是占有內存的一部分) 
  33.   paths: 
  34.     - /var/log/nginx/access.log    # 監控nginx 的access日志 
  35.  
  36.   fields:                          # 額外的字段 
  37.     source: nginx-access-prod      # 自定義source字段,用于es建議索引(字段名小寫,我記得大寫好像不行) 
  38.  
  39. # 自定義es的索引需要把ilm設置為false 
  40. setup.ilm.enabled: false 
  41.  
  42. output.kafka:            # 輸出到kafka 
  43.   enabled: true          # 該output配置是否啟用 
  44.   hosts: ["172.20.166.27:9092""172.20.166.28:9092""172.20.166.29:9092"]  # kafka節點列表 
  45.   topic: "elk-%{[fields.source]}"   # kafka會創建該topic,然后logstash(可以過濾修改)會傳給es作為索引名稱 
  46.   partition.hash: 
  47.     reachable_only: true # 是否只發往可達分區 
  48.   compression: gzip      # 壓縮 
  49.   max_message_bytes: 1000000  # Event最大字節數。默認1000000。應小于等于kafka broker message.max.bytes值 
  50.   required_acks: 1  # kafka ack等級 
  51.   worker: 1  # kafka output的最大并發數 
  52.   bulk_max_size: 2048    # 單次發往kafka的最大事件數 
  53. logging.to_files: true   # 輸出所有日志到file,默認true, 達到日志文件大小限制時,日志文件會自動限制替換,詳細配置:https://www.cnblogs.com/qinwengang/p/10982424.html 
  54. close_older: 30m         # 如果一個文件在某個時間段內沒有發生過更新,則關閉監控的文件handle。默認1h 
  55. force_close_files: false # 這個選項關閉一個文件,當文件名稱的變化。只在window建議為true 
  56.  
  57. # 沒有新日志采集后多長時間關閉文件句柄,默認5分鐘,設置成1分鐘,加快文件句柄關閉 
  58. close_inactive: 1m 
  59.  
  60. # 傳輸了3h后荏沒有傳輸完成的話就強行關閉文件句柄,這個配置項是解決以上案例問題的key point 
  61. close_timeout: 3h 
  62.  
  63. # 這個配置項也應該配置上,默認值是0表示不清理,不清理的意思是采集過的文件描述在registry文件里永不清理,在運行一段時間后,registry會變大,可能會帶來問題 
  64. clean_inactive: 72h 
  65.  
  66. # 設置了clean_inactive后就需要設置ignore_older,且要保證ignore_older < clean_inactive 
  67. ignore_older: 70h 
  68.  
  69. # 限制 CPU和內存資源 
  70. max_procs: 1 # 限制一個CPU核心,避免過多搶占業務資源 
  71. queue.mem.events: 256 # 存儲于內存隊列的事件數,排隊發送 (默認4096) 
  72. queue.mem.flush.min_events: 128 # 小于 queue.mem.events ,增加此值可提高吞吐量 (默認值2048) 
  73.  
  74. # 啟動 filebeat 
  75. $ systemctl start filebeat 

十一、部署 curator,定時清理es索引

logstash3 機器操作

  1. # 參考鏈接:https://www.elastic.co/guide/en/elasticsearch/client/curator/current/yum-repository.html 
  2.  
  3. # 安裝 curator 服務,以 centos7 為例 
  4. $ rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch 
  5.  
  6. $ vim /etc/yum.repos.d/elk-curator-5.repo 
  7.  
  8. [curator-5] 
  9. name=CentOS/RHEL 7 repository for Elasticsearch Curator 5.x packages 
  10. baseurl=https://packages.elastic.co/curator/5/centos/7 
  11. gpgcheck=1 
  12. gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch 
  13. enabled=1 
  14.  
  15. $ yum install elasticsearch-curator -y 
  16.  
  17. # 創建 curator 配置文件目錄與輸出日志目錄 
  18. $ mkdir -p /data/ELKStack/curator/logs 
  19. $ cd /data/ELKStack/curator 
  20.  
  21. $ vim config.yml 
  22.  
  23. --- 
  24. # Remember, leave a key empty if there is no value.  None will be a string, 
  25. # # not a Python "NoneType" 
  26. client: 
  27.   hosts: ["172.20.166.25""172.20.166.24""172.20.166.22""172.20.166.23""172.20.166.26"
  28.   port: 9200 
  29.   url_prefix: 
  30.   use_ssl: False 
  31.   certificate: 
  32.   client_cert: 
  33.   client_key: 
  34.   ssl_no_validate: False 
  35.   http_auth: elastic:elastic123 
  36.   timeout: 150 
  37.   master_only: False 
  38.  
  39. logging: 
  40.   loglevel: INFO 
  41.   logfile: /data/ELKStack/curator/logs/curator.log 
  42.   logformat: default 
  43.   blacklist: ['elasticsearch''urllib3'
  44.  
  45. $ vim action.yml 
  46.  
  47. --- 
  48. # Remember, leave a key empty if there is no value.  None will be a string, 
  49. not a Python "NoneType" 
  50. # Also remember that all examples have 'disable_action' set to True.  If you 
  51. # want to use this action as a template, be sure to set this to False after 
  52. # copying it. 
  53. actions: 
  54.   1: 
  55.     action: delete_indices 
  56.     description: >- 
  57.       Delete indices older than 30 days. Ignore the error if the filter does not result in an actionable list of indices (ignore_empty_list) and exit cleanly. 
  58.     options: 
  59.       ignore_empty_list: True 
  60.       disable_action: False 
  61.     filters: 
  62.     - filtertype: pattern 
  63.       kind: regex 
  64.       value: '^((?!(kibana|json|monitoring|metadata|apm|async|transform|siem|security)).)*$' 
  65.     - filtertype: age 
  66.       source: creation_date 
  67.       direction: older 
  68.       #timestring: '%Yi-%m-%d' 
  69.       unit: days 
  70.       unit_count: 30 
  71.   2: 
  72.     action: delete_indices 
  73.     description: >- 
  74.       Delete indices older than 15 days. Ignore the error if the filter does not result in an actionable list of indices (ignore_empty_list) and exit cleanly. 
  75.     options: 
  76.       ignore_empty_list: True 
  77.       disable_action: False 
  78.     filters: 
  79.     - filtertype: pattern 
  80.       kind: regex 
  81.       value: '^(nginx-).*$' 
  82.     - filtertype: age 
  83.       source: creation_date 
  84.       direction: older 
  85.       #timestring: '%Yi-%m-%d' 
  86.       unit: days 
  87.       unit_count: 15 
  88.  
  89. # 設置定時任務清理es索引 
  90. $ crontab -e 
  91.  
  92. 0 0 * * * /usr/bin/curator --config /data/ELKStack/curator/config.yml /data/ELKStack/curator/action.yml 

十二、參考鏈接

  • es證書配置:https://cloud.tencent.com/developer/article/1549834
  • es忘記密碼找回:https://www.cnblogs.com/woshimrf/p/docker-es7.html
  • es設置密碼:https://blog.csdn.net/extraordinarylife/article/details/107917764?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-2&spm=1001.2101.3001.4242
  • elk-kafka部署 1:https://www.codenong.com/cs106056710/
  • elk-kafka部署 2:https://www.cnblogs.com/lz0925/p/12061293.html
  • elk優化:https://www.clxz.top/2020/06/19/elk-kafka-optimization/
  • es7索引分片:https://www.elastic.co/guide/en/elasticsearch/reference/current/index-modules.html
  • filebeat優化:https://www.jianshu.com/p/389702465461
  • kafka數據與日志清理:https://blog.csdn.net/VIP099/article/details/106257561

原文地址:https://mp.weixin.qq.com/s/Hx2lNG4D6vhgjd1Ftaa8GA

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美女露全身永久免费网站 | 天天操网| 亚洲国产自 | 久久视频在线视频观看天天看视频 | 色网在线视频 | 男人懂得网站 | 国产农村乱子伦精品视频 | 欧美艳星kagney1ynn | 亚洲精品一区二区三区在线播放 | 国产精品激情综合久久 | 色淫阁小说 | 美女下面揉出水免费视频 | 日韩天堂视频 | 美女脱一净二净不带胸罩 | 精品国产免费观看一区高清 | 荡娃艳妇有声小说 | 美国女网址www呦女 美国复古性经典xxxxx | 天天做天天爽 | 国产精品全国探花在线观看 | 日本hd18 | 亚洲青草视频 | 秋霞一级成人欧美理论 | 四虎永久成人免费 | 蘑菇香蕉茄子绿巨人丝瓜草莓 | 精品亚洲视频在线观看 | 欧美精品一线二线大片 | 亚洲天堂一区二区在线观看 | 5566中文字幕亚洲精品 | 99久久精品国产一区二区 | 日本www视频在线观看 | 99热这里只有精品久久免费 | 热久久免费 | 亚洲小视频网站 | 亚洲视频一 | 香港日本三级亚洲三级 | 香蕉久久夜色精品国产小优 | 国色天香社区在线视频免费观看 | 亚洲国产第一区二区三区 | 亚洲香蕉综合在人在线视看 | 国产一卡2卡3卡四卡精品网站 | 极端 成熟 性别 视频 |