Monitoring으로 로그 표시(인증+TLS 유효판)
14412 단어 7.28.07.1키바나Elasticsearch
소개
일본이 영화를 맞이했을 무렵, Elastic에서는 BASIC 서브스크립션으로 Security가 유효하게 되었습니다!
(게다가 갱신이 멈췄다고 생각되고 있던 6계에도 백포트되어 6.8가!)
이번에는 이전 Monitoring으로 로그 보기 에서 만든 docker-compose.yml
에서도 보안을 활성화해 보겠습니다.
(2019.05.20 추가) 보안을 활성화하면 TLS도 활성화하지 않으면 화나게 됩니다.
준비
다음을 보면서 컨테이너에서 TLS를 사용할 수 있습니다.
설정 변경
docker-compose.yml 수정
elasticsearch에서 보안을 활성화하고 kibana에서 사용자 이름과 암호를 지정합니다.
패스워드는 ELASTIC_PASSWORD
로 지정하고 있습니다만, 어디까지나 테스트라고 하는 것으로 적당한 것을 지정하고 있습니다 (실제로 사용할 때는, 제대로 설정하지 않으면입니다만).
docker-compose.ymlversion: '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
도 만들어 둡니다.
.envCERTS_DIR=/usr/share/elasticsearch/config/certs
filebeat.yml 수정
filebeat.yml
그러나 사용자 이름과 암호를 지정합니다.
filebeat.ymlfilebeat.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
문제가 없으면 로그를 수집하고 Monitoring에서 로그를 볼 수 있어야합니다.
하지만 Monitoring을 보면 다음과 같은 오류 메시지가 나타납니다.
[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을 보면...
{
"mapping": {
"properties": {
"@timestamp": {
"type": "date"
},
(snip)
"event": {
"properties": {
"created": {
"type": "date"
},
"dataset": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
(snip)
}
event.dataset
하지만 text
형이 되어 버리고 있네요・・・
template가 들어갈 것이므로, 제대로 event.dataset
는 keyword
형이 될 것인데.
Filebeat의 처리를 제대로 본 것은 아닙니다만, 아무래도 template가 등록되기 전에 Rollover용 Index( filebeat-8.0.0-{now/d}-000001
)가 등록되어 버리는 것 같습니다.
ILM도 활성화되지 않았습니다.
하는 일은 같을 것인데, 왜 전에는 잘 했을까? ? ?
template가 남아 있었는지...
-> 버그였던 것 같다. 지금 (2019.05.15 현재는 수정되었습니다)
게다가 보안에 관계없고 orz
다루다
아래의 순서로 기동해 봅니다.
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:
CERTS_DIR=/usr/share/elasticsearch/config/certs
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)
}
docker-compose up -d elasticsearch kibana
docker-compose run beats setup -e --modules elasticsearch
DELETE filebeat-*
docker-compose up -d beats
Rollover용 Index는 다음과 같은 느낌으로 등록합니다.
PUT %3Cfilebeat-8.0.0-%7Bnow%2Fd%7D-000001%3E
{
"aliases": {
"filebeat-8.0.0": {}
}
}
그래서 다시 Index를 확인하면 ...
제대로 된 것 같습니다.
결론
보안 자체는 아무런 문제없이 사용할 수있었습니다.
라고 할까, BASIC로 시큐리티가 유효하게 되는 것은 좋네요. 빨리 공식 출시되기를 바랍니다.
Reference
이 문제에 관하여(Monitoring으로 로그 표시(인증+TLS 유효판)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tak7iji/items/3d8c5b044152016e1d96
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Monitoring으로 로그 표시(인증+TLS 유효판)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tak7iji/items/3d8c5b044152016e1d96텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)