使用监控功能显示日志(包括认证和启用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)。

ILM似乎没有生效。
虽然做的事情应该是一样的,为什么以前却成功了呢?可能是模板还留着吧…
似乎是个bug。目前(截止到2019年5月15日),已经修复了。
而且与安全无关 或z
处理
我将按照以下步骤进行启动并查看。
-
- 使用docker-compose启动elasticsearch和kibana服务
-
- 使用docker-compose运行beats并设置elasticsearch模块
-
- 删除文件beat-*
-
- 注册Rollover用的Index
- 使用docker-compose启动beats服务
Rollover使用的Index将按照以下的方式进行注册。
PUT %3Cfilebeat-8.0.0-%7Bnow%2Fd%7D-000001%3E
{
"aliases": {
"filebeat-8.0.0": {}
}
}
所以,当再次确认Index时…

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