使用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
  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Docker-compose 部署 ELK(Elasticsearch、Logstash、Kibana)的步骤如下: 1. 创建一个目录,例如 elk,用于存放 docker-compose.yml 文件和其他配置文件。 2. 在 elk 目录下创建一个 docker-compose.yml 文件,内容如下: ``` version: '3' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2 container_name: elasticsearch environment: - discovery.type=single-node ports: - "920:920" - "930:930" volumes: - ./elasticsearch/data:/usr/share/elasticsearch/data networks: - elk logstash: image: docker.elastic.co/logstash/logstash:7.10.2 container_name: logstash volumes: - ./logstash/config:/usr/share/logstash/pipeline/ environment: - ELASTICSEARCH_HOSTS=http://elasticsearch:920 ports: - "500:500" - "960:960" networks: - elk kibana: image: docker.elastic.co/kibana/kibana:7.10.2 container_name: kibana environment: - ELASTICSEARCH_HOSTS=http://elasticsearch:920 ports: - "5601:5601" networks: - elk networks: elk: driver: bridge ``` 3. 在 elk 目录下创建一个 elasticsearch 目录,用于存放 Elasticsearch 的数据。 4. 在 elk 目录下创建一个 logstash 目录,用于存放 Logstash 的配置文件。 5. 在 logstash 目录下创建一个 logstash.conf 文件,用于配置 Logstash 的输入、过滤和输出,例如: ``` input { tcp { port => 500 codec => json } } filter { # 过滤器配置 } output { elasticsearch { hosts => ["http://elasticsearch:920"] index => "logstash-%{+YYYY.MM.dd}" } } ``` 6. 在 elk 目录下运行以下命令启动 ELK: ``` docker-compose up -d ``` 7. 访问 http://localhost:5601 即可打开 Kibana 界面,开始使用 ELK。 注意:在生产环境中,应该根据实际需求对 ELK 进行配置和优化,例如设置 Elasticsearch 的内存和磁盘限制、配置 Logstash 的过滤器和输出、使用安全证书等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菜鸟白小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值