Docker化ES监控

背景:在一个宿主机上,通过使用 docker 启动多套 kibana-elasticsearch 监控不同的远程 ES 集群。每一套 kibana-elasticsearch 是通过 docker compose 启动的,负责监控指定的 ES 集群;所以多套 kibana-elasticsearch 之间要使用不同的宿主机端口,以便远程被监控的 ES 集群发送监控数据到对应的一套 kibana-elasticsearch。

一. 宿主机重要配置

  1. 宿主机要设置 vm.max_map_count

查询:grep vm.max_map_count /etc/sysctl.conf,如果没有该值

  • 永久配置:
sudo vim /etc/sysctl.conf : 添加  vm.max_map_count=262144
sudo sysctl -p : 使上述配置生效
  • 临时性设置:sudo sysctl -w vm.max_map_count=262144

二. 安装 docker-ce

https://docs.docker-cn.com/engine/installation/linux/docker-ce/centos/#%E4%BD%BF%E7%94%A8%E9%95%9C%E5%83%8F%E4%BB%93%E5%BA%93%E8%BF%9B%E8%A1%8C%E5%AE%89%E8%A3%85

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum makecache fast
sudo yum install docker-ce-18.06.1.ce-3.el7
sudo systemctl start docker    // 启动 docker daemon

三. 安装 docker compose

https://github.com/docker/compose/releases

sudo curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo /usr/local/bin/docker-compose --version

四. Docker compose 相关配置

使用 docker compose 同时启动 kibana 和 elasticsearch,需要使用 3 个配置文件,即 docker-compose.yml、elasticsearch.yml、kibana.yml。

1. docker-compose.yml

内容如下(假设为 weixin es 集群配置监控):

version: '2.2'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:6.4.3
    container_name: es-weixin           // use "es-weixin"
    environment:
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - /data/elasticsearch/esdata-weixin:/usr/share/elasticsearch/data      // use /data/esdata-weixin to store monitor data,如果是 azure vm,先看第八部分
      - ./elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    ports:
      - 9202:9200  // 宿主机 9202 端口号映射到 docker container 端口 9200,其他节点可使用 9202 访问此 es 实例
      - 9302:9300  // 宿主机 9302 端口号映射到 docker container 端口 9300
    networks:
      - esnet-weixin
  kibana:
    image: docker.elastic.co/kibana/kibana:6.4.3
    container_name: kibana-weixin   // use "kibana-weixin"
    ports:
      - 5602:5601  // 宿主机 5602 端口号映射到 docker container 端口 5601,其他节点可使用 5602 访问此 kibana 实例
    volumes:
      - ./kibana.yml:/usr/share/kibana/config/kibana.yml
    networks:
      - esnet-weixin
volumes:
  esdata-weixin:
    driver: local

networks:
  esnet-weixin:
    driver: bridge

2. elasticsearch.yml

内容如下:

cluster.name: weixin-cluster-monitoring-es     // 注意换掉名字
node.name: node-for-weixin                     // 注意换掉名字,也可以不配置
network.host: 0.0.0.0
discovery.zen.minimum_master_nodes: 1
discovery.type: single-node

bootstrap.memory_lock: true

xpack.monitoring.enabled: false
xpack.security.enabled: false

3. kibana.yml

内容如下:

server.name: weixin-kibana
server.host: 0.0.0.0 

elasticsearch.url: http://x.x.x.x:9202  (x.x.x.x 为宿主机的 IP,尽量使用内网 IP;注意此处端口号就是之前配置的映射到9200的宿主机端口号9202)

此处有重要的额外设置:我们宿主机是 Azure 的虚拟机,需要在 portal 上配置该虚拟机的端口 9202、5602 可访问。

五. 启动监控二人组

执行 sudo /usr/local/bin/docker-compose up 2>&1 | sed 's/\x1B\[[0-9;]*[JKmsu]//g' | tee -a log

log 为日志文件,sed 是去掉输出信息中的 color code(在vim 中显示为乱码)。

启动成功后,在浏览器中输入 x.x.x.x:5602 即可访问 kibana

六. Monitored ES 集群配置

  1. 被监控的 ES 集群配置

ES 集群每个节点的配置文件修改sudo vim /etc/elasticsearch/elasticsearch.yml,添加如下配置

xpack.monitoring.collection.enabled: true
xpack.security.enabled: false
xpack.monitoring.exporters:
  test-remote:
    type: http
    host: ["http://x.x.x.x:9202","http://y.y.y.y:9202"]    // host 一个或多个; 这里 ip 要看具体情况来决定是用内网 IP 还是外网 IP,只要保证集群中每个节点都能访问这个 IP 就行。

ES 集群的版本只要高于6.3,默认安装 x-pack,且开启 security,license 也是basic 版本。所以我们无需更改 license,也无需安装 x-pack,但是需要禁用 recurity(xpack.security.enabled: false),并开启监控数据的收集(xpack.monitoring.collection.enabled: true);另外,需要将收集到的监控数据发送到另一个 es 集群(test-remote)。

  1. 重启 ES 节点 sudo -i service elasticsearch restart,此时观察 ES 集群的状态(
    GET _cluster/health),等变为 green 再配置下一个节点。

七. 确认监控的正确性

点击 x.x.x.x:5602 的 kibana -> Monitoring,应该可以看到 Monitered ES 集群的监控信息。

八. 监控数据存储

Azure vm 的系统盘很小,不够存储 es 监控数据,就需要另外挂载一个数据盘。

  1. 在 Azure portal 上 vm-> disk 下,添加数据盘
  2. 将上述数据盘挂载到 vm 下:
https://docs.microsoft.com/en-us/azure/virtual-machines/linux/attach-disk-portal

sudo fdisk /dev/sdc 
sudo mkfs -t ext4 /dev/sdc1
sudo mkdir /data
sudo mount /dev/sdc1 /data
sudo -i blkid
sudo vi /etc/fstab

mkdir -p /data/elasticsearch/esdata-weixin
注意该目录的权限,如果 owner 是合适的,在启动 docker es 的时候不会报错,但是如果存在权限问题,启动 docker es 会报错。如果报错,可以尝试改动目录的 owner 或者 读写权限,比如改成 777(存在安全隐患):
sudo chmod 777 /data/elasticsearch/esdata-weixin:防止 docker 没有权限写

你可能感兴趣的:(Docker化ES监控)