使用监控功能显示日志(包括认证和启用TLS版本)

首先/起初

正当日本进入令和时,Elastic在其基础订阅中启用了安全功能!而且令人惊喜的是,曾经停止更新的6系也被后续带回,推出了6.8版本!

这次,我们将在之前创建的docker-compose.yml文件中的Monitoring日志显示中尝试启用安全性。
(2019.05.20 补充)启用安全性后,如果不启用TLS,将会遭到警告。

准备

在参考以下内容的情况下,让容器支持TLS加密。

修改设置

修改 docker-compose.yml 文件

在elasticsearch中启用安全功能,并在kibana中指定用户名和密码。密码是使用ELASTIC_PASSWORD指定的,但这只是为了测试目的而随意指定的(在实际使用时,必须正确设置)。

version: '2'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.0.0-SNAPSHOT
    container_name: elasticsearch4
    environment:
      - cluster.name=docker-cluster
      - node.name=node-1
      - cluster.initial_master_nodes=node-1
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - path.repo=/usr/share/elasticsearch/snapshots
      - xpack.security.enabled=true
      - ELASTIC_PASSWORD=elastic
      - xpack.security.transport.ssl.enabled=true
      - xpack.security.transport.ssl.verification_mode=certificate
      - xpack.security.transport.ssl.key=$CERTS_DIR/elasticsearch4/elasticsearch4.key
      - xpack.security.transport.ssl.certificate=$CERTS_DIR/elasticsearch4/elasticsearch4.crt
      - xpack.security.transport.ssl.certificate_authorities=$CERTS_DIR/ca/ca.crt    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - esdata1:/usr/share/elasticsearch/data
      - ./certs:$CERTS_DIR
    ports:
      - 9204:9200
    networks:
      - esnet
  kibana:
    image: docker.elastic.co/kibana/kibana:8.0.0-SNAPSHOT
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch4:9200
      - ELASTICSEARCH_USERNAME=elastic
      - ELASTICSEARCH_PASSWORD=elastic
    container_name: kibana4
    ports:
      - 5605:5601
    networks:
      - esnet
  beats:
    image: docker.elastic.co/beats/filebeat:8.0.0-SNAPSHOT
    container_name: beats4
    user: root
    environment:
      - ELASTICSEARCH_CONTAINER_NAME=elasticsearch4
      - ELASTICSEARCH_HOSTS=http://elasticsearch4:9200
      - KIBANA_HOST=http://kibana4:5601
    volumes:
      - /var/lib/docker/containers:/var/lib/docker/containers:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./filebeat.yml:/usr/share/filebeat/filebeat.yml
    networks:
      - esnet

volumes:
  esdata1:
    driver: local

networks:
  esnet:

在与docker-compose.yml相同的目录中,也创建一个.env文件。

CERTS_DIR=/usr/share/elasticsearch/config/certs

对filebeat.yml文件进行修改。

在 filebeat.yml 文件中,我们可以指定用户名和密码。

filebeat.autodiscover:
  providers:
    - type: docker
      labels.dedot: true
      templates:
        - condition:
            contains:
              docker.container.name: ${ELASTICSEARCH_CONTAINER_NAME:elasticsearch}
          config:
             - module: elasticsearch
               server:
                 enabled: true
                 input:
                   type: docker
                   containers.ids:
                     - "${data.docker.container.id}"
setup.kibana:
  host: "${KIBANA_HOST:kibana:5601}"
  username: elastic
  password: elastic
output.elasticsearch:
  hosts: '${ELASTICSEARCH_HOSTS:elasticsearch:9200}'
  username: elastic
  password: elastic

开机

使用以下命令启动容器。

$ docker-compose up -d

如果没有问题,应该可以通过监控进行日志收集,并显示在监控界面上。
但是,一旦显示监控界面,就会弹出以下错误消息。

[illegal_argument_exception] Fielddata is disabled on text fields by default. Set fielddata=true on [event.dataset] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.: Check the Elasticsearch Monitoring cluster network connection or the load level of the nodes.

发生了什么事情?

Set fielddata=true on [event.dataset] 

根据显示的信息,查看映射…

{
   "mapping": {
     "properties": {
       "@timestamp": {
         "type": "date"
       },
(snip)
       "event": {
         "properties": {
           "created": {
             "type": "date"
           },
           "dataset": {
             "type": "text",
             "fields": {
               "keyword": {
                 "type": "keyword",
                 "ignore_above": 256
               }
             }
           },
(snip)
}

事件数据集变为文本类型了呢…
应该是模板的, 事件数据集应该是关键词类型的。

尽管我还没有完全了解Filebeat的处理方式,但似乎在模板注册之前,已经注册了Rollover用的Index(filebeat-8.0.0-{now/d}-000001)。

Screenshot_2019-05-08 Kibana.png

ILM似乎没有生效。
虽然做的事情应该是一样的,为什么以前却成功了呢?可能是模板还留着吧…
似乎是个bug。目前(截止到2019年5月15日),已经修复了。

而且与安全无关 或z

处理

我将按照以下步骤进行启动并查看。

    1. 使用docker-compose启动elasticsearch和kibana服务

 

    1. 使用docker-compose运行beats并设置elasticsearch模块

 

    1. 删除文件beat-*

 

    1. 注册Rollover用的Index

 

    使用docker-compose启动beats服务

Rollover使用的Index将按照以下的方式进行注册。

PUT %3Cfilebeat-8.0.0-%7Bnow%2Fd%7D-000001%3E
{
   "aliases": {
     "filebeat-8.0.0": {}
   }
}

所以,当再次确认Index时…

Screenshot_2019-05-08 Kibana(1).png

好像做得还不错。

最后

安全性本身没有任何问题,可以正常使用。
而且,在BASIC中启用安全性是很好的。希望能尽快正式发布。

广告
将在 10 秒后关闭
bannerAds