使用docker-compose部署elk

使用Docker Compose部署ELK(Elasticsearch、Logstash、Kibana)的好处主要体现在以下几个方面:

  1. 集中管理日志数据:ELK能够帮助业务实现日志数据的集中管理,通过Elasticsearch进行搜集、分析和存储,Kibana为Elasticsearch提供图形化界面,使得日志数据的查看和分析更加直观和便捷。
  2. 快速搜索和分析:ELK能够快速搜索和分析日志数据,从而提高故障排查的效率,优化系统性能,以及发现潜在的安全威胁。这对于业务运营和决策支持具有重要意义。
  3. 开源和免费:ELK都是开源软件,可以互相配合使用,完美衔接,高效的满足了很多场合的应用。这降低了部署和使用的成本,同时也提供了更大的灵活性和可定制性。
  4. 易于扩展和部署:使用Docker Compose部署ELK可以简化部署过程,提高可扩展性和灵活性。通过简单的命令,您可以快速创建和启动一个ELK服务,并根据需要增加更多的节点或代理。
  5. 跨平台部署:Docker Compose适用于不同的操作系统和云平台。无论您是在本地开发环境还是生产环境中部署ELK,Docker Compose都可以帮助您快速搭建和扩展环境。

总之,使用Docker Compose部署ELK可以简化部署过程,提高可扩展性和灵活性,同时提供集中管理日志数据、快速搜索和分析等功能,对于业务运营和决策支持具有重要意义。

1. 安装docker

yum install -y yum-utils
yum-config-manager \
  --add-repo \
  https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
#启动docker
systemctl start docker
systemctl enable docker

2. 安装docker compose

因github为国外源,可能会出现下载失败或下载速度很慢的情况。可自行从别的渠道下载,拷贝到相应目录并赋予可执行权限即可

sudo curl -SL https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

3. 编辑docker-compose.yml

mkdir -p /home/elk
cd /home/elk
vi docker-compose.yml
version: '3.8'
services:
  es01:
    depends_on:
      - jdk17
    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.0
    container_name: es01
    restart: always
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - discovery.seed_providers=file
      - discovery.seed_hosts=es02,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms3g -Xmx3g"
      - http.cors.enabled=true
      - http.cors.allow-origin=*
      - xpack.security.enabled=false
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - elastic

  es02:
    depends_on:
      - jdk17
    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.0
    container_name: es02
    restart: always
    environment:
      - node.name=es02
      - cluster.name=es-docker-cluster
      - discovery.seed_providers=file
      - discovery.seed_hosts=es01,es03
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms3g -Xmx3g"
      - http.cors.enabled=true
      - http.cors.allow-origin=*
      - xpack.security.enabled=false
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data02:/usr/share/elasticsearch/data
    ports:
      - 9201:9200
    networks:
      - elastic
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:9200"]
      interval: 30s
      timeout: 10s
      retries: 5

  es03:
    depends_on:
      - jdk17
    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.0
    container_name: es03
    restart: always
    environment:
      - node.name=es03
      - cluster.name=es-docker-cluster
      - discovery.seed_providers=file
      - discovery.seed_hosts=es01,es02
      - cluster.initial_master_nodes=es01,es02,es03
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms3g -Xmx3g"
      - http.cors.enabled=true
      - http.cors.allow-origin=*
      - xpack.security.enabled=false
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - data03:/usr/share/elasticsearch/data
    ports:
      - 9202:9200
    networks:
      - elastic

  jdk17:
    image: openjdk:17
    container_name: jdk17
    restart: always
    networks:
      - elastic

  kibana:
    depends_on:
      - es01
      - es02
      - es03
    image: docker.elastic.co/kibana/kibana:7.17.0
    container_name: kibana
    restart: always
    privileged: true  
    volumes:
      - kibana_certs:/usr/share/kibana/config/certs
      - kibana_data:/usr/share/kibana/data
    networks:
      - elastic
    ports:
      - 5601:5601
    deploy:
      restart_policy:
        condition: on-failure
        delay: 30s
        max_attempts: 5
    environment:
      ELASTICSEARCH_HOSTS: '["http://es01:9200","http://es02:9200","http://es03:9200"]'
      I18N_LOCALE: zh-CN
    healthcheck:
      test:
        [
          "CMD-SHELL",
          "curl -s -I http://localhost:5601 | grep -q 'HTTP/1.1 302 Found'",
        ]
      interval: 10s
      timeout: 10s
      retries: 120

  cerebro:
    image: lmenezes/cerebro:0.9.4
    container_name: cerebro
    restart: always
    ports:
      - "9101:9000"
    command:
      - -Dhosts.0.host=http://es01:9200
      - -Dhosts.1.host=http://es01:9200
      - -Dhosts.2.host=http://es01:9200
    networks:
      - elastic

  eshead:
    image: alvinos/elasticsearch-head
    container_name: eshead
    restart: always
    ports:
      - '9100:9100'
    networks:
      - elastic

  portainer:
    image: portainer/portainer:latest
    container_name: portainer
    hostname: portainer
    restart: always
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - portainer_data:/data
      - portainer_public:/public
    environment:
      TZ: Asia/Shanghai
      LANG: en_US.UTF-8
    ports:
      - "9000:9000"
    networks:
      - elastic


volumes:
  data01:
    driver: local
  data02:
    driver: local
  data03:
    driver: local
  kibana_certs:
    driver: local
  kibana_data:
    driver: local
  portainer_data:
    driver: local
  portainer_public:
    driver: local
networks:
  elastic:
    driver: bridge

4.启动容器

需要进入docker-compose.yml文件所在目录进行操作

cd /home/elk
docker-compose up -d #创建容器并启动服务,如果镜像不存在时,会自动下载镜像
docker-compose down #关闭整个项目并移除容器、移除网络、不会移除数据卷,删除项目不会丢失mysql数据
docker-compose stop #停止容器服务
docker-compose start #启动容器服务
docker-compose restart #重启整个项目
docker-compose logs #查看容器日志
以上命令可以通过加服务名称管理指定的服务,比如docker-compose stop es01表示只停止es01容器

5. 报错异常处理

报错:max virtual memory areas vm. max_map_count [65530] is too low, increase to at least [262144]
现象:Elasticsearch数据库启动异常,9200无法访问
原因:Elasticsearch数据库运行需要大量内存,而你的系统中的vm.max_map_count值过低,无法满足程序的需求。
解决方法如下:
#临时,立即生效
sysctl -w vm.max_map_count=262144 
#永久生效
vi /etc/sysctl.conf 
vm.max_map_count=262144
sysctl -p #使配置生效

6.web访问

#elk页面访问地址:无需密码,可直接访问
http://ip:5601
#Elasticsearch数据库地址:
http://ip:9200
#Elasticsearch数据库管理地址:
http://ip:9100
#docker容器管理地址:
http://ip:9000

你可能感兴趣的:(使用docker-compose部署elk)