构建日志分析平台#1(弹性堆栈)
首先
有名的日志分析基础设施包括Splunk,然而,商业壁垒依然存在于许可问题之中。
我们可以通过ElasticStack实现类似于Splunk的用法。
需要说明的是,由于基本许可证提供了用户认证功能,我们将启用用户认证。
环境
尽可能利用最新的环境。这次使用容器。
此外,为了实现多个容器,使用docker-compose。
# MacBook Pro(13-inch, 2017, Four Thunderbolt 3 Ports)
# 3.1GHz DualCore Intel Core i5
# 16GB 2133 MHz LPDDR3
strike:~ marseille$ uname -a
Darwin strike.local 19.5.0 Darwin Kernel Version 19.5.0: Tue May 26 20:41:44 PDT 2020; root:xnu-6153.121.2~2/RELEASE_X86_64 x86_64
strike:~ marseille$ docker -v
Docker version 19.03.8, build afacb8b
准备容器
使用官方形象。详细的环境变量解释将在各小节中进行。
文件夹结构
-
- mnt/configに各コンテナの設定ファイルを設置し環境設定を柔軟にできるように準備したが、現状では利用していない。
-
- mnt/es-dataにはelasticsearchが蓄積するデータを格納する。ホスト側ボリュームをマウントすることによりデータの永続化を行う。
-
- mnt/logstash-pipelineは、logstashにて収集するデータに関する処理を定義するファイルを格納する。
-
- reference/elasticsearchは、mnt/configに設置するためのベースとなるelasticの設定ファイルを一時的に保存してある。
-
- reference/kibanaもelasticsearchと同様。
- reference/kibana-dockerは、コンテナの環境変数で設定できる引数が一覧化されたファイルが設置されている。
.
├── docker-compose.yml
├── mnt
│ ├── config
│ ├── es-data
│ └── logstash-pipeline
│ └── hello-logstash.conf
├── reference
│ ├── elastichsearch
│ │ ├── elasticsearch.yml
│ │ └── elasticsearch.yml.origin
│ ├── kibana
│ │ ├── kibana.yml
│ │ └── kibana.yml.origin
│ └── kibana-docker
└── tmp
└── syslog.cfg
程式码
如果要使用docker-compose的环境变量来配置Kibana,需要注意以下事项。
-
- dot(.)を(_)にする
- アルファベットを大文字にする
顺便提一下,在容器内部存储的”/usr/share/kibana/config/kibana.yml”文件中,包含了这份说明。
# configファイル
elasticsearch.password=your-password
# container environment
ELASTIC_PASSWORD=your-password
version: "3"
## https://tsgkdt.hatenablog.jp/entry/2019/07/10/234747
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2
environment:
- discovery.type=single-node
- cluster.name=docker-cluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx1g"
- xpack.security.enabled=true
- xpack.security.authc.api_key.enabled=true
- ELASTIC_PASSWORD=your-password
ulimits:
memlock:
soft: -1
hard: -1
volumes:
#- ./mnt/config/elastichsearch:/usr/share/elasticsearch/config
- ./mnt/es-data:/usr/share/elasticsearch/data
# kibana config file => /usr/share/kibana/config/kibana.yml in container
# kibana container environment: https://www.elastic.co/guide/en/kibana/current/settings.html
kibana:
image: docker.elastic.co/kibana/kibana:7.6.2
depends_on:
- elasticsearch
ports:
- 80:5601
environment:
- ELASTICSEACH_URL=http://elasticsearch:9200
- I18N_LOCALE=ja-JP
- ELASTICSEARCH_USERNAME=elastic
- ELASTICSEARCH_PASSWORD=your-password
#volumes:
#- ./mnt/config/kibana:/usr/share/kibana/config
logstash:
image: docker.elastic.co/logstash/logstash:7.6.2
depends_on:
- kibana
environment:
- xpack.monitoring.enabled=false
volumes:
- ./mnt/logstash-pipeline:/usr/share/logstash/pipeline
关于elasticsearch环境变量设置的事项。
以下列举出了一些稍微难一点的意译,包括了本次没有利用的内容。
请将vm.max_map_count设置为至少262144。
如果要在生产环境中使用,需要将内核的vm.max_map_count设置为至少262144。
设置vm.max_map_count的方法因平台而异。
[附注] vm.max_map_count是一个参数,用于指定程序的内存空间大小(程序可以分配的内存大小)的最大值。
禁用交换
为了保证性能和节点稳定性,需要禁用交换。如果使用 bootstrap.memory_lock:true 的设置,需要在 Docker 守护进程中定义 memlock:true ulimit,或者显式地将其配置到容器中,就像样例编译文件一样。如果使用 docker run 命令,应该按以下方式指定。
-e "bootstrap.memory_lock=true" --ulimit memlock=-1:-1
设定堆大小
要设置堆大小,需要将JVM选项文件绑定到/usr/share/elasticsearch/config/jvm.options.d目录中。
默认的根jvm.options文件将默认堆大小设为1GB,但请注意,通过绑定挂载的JVM选项文件中设置的值将会覆盖所有值。
推荐使用绑定挂载的JVM选项来设置堆大小,但也可以使用环境变量ES_JAVA_OPTS来进行设置。
例如,要使用16GB,可以使用命令`-e ES_JAVA_OPTS=”-Xms16g -Xmx16g”`来指定docker run。
默认的jvm.options文件将默认堆大小设置为1GB,请注意通过ES_JAVA_OPTS设置的任意值将覆盖它。
Xms表示的是最小堆大小,而Xmx表示的是最大堆大小。
确认动作
当启动并确认日志时,如果显示了连接等待的Kibana日志,请访问。
用户名为“elastic”,密码是根据ELASTICSEARCH_PASSWORD指定的。
strike:elastic marseille$ docker-compose up -d
Creating network "elastic_default" with the default driver
Creating elastic_elasticsearch_1 ... done
Creating elastic_kibana_1 ... done
Creating elastic_logstash_1 ... done
strike:elastic marseille$
strike:elastic marseille$ docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------
elastic_elasticsearch_1 /usr/local/bin/docker-entr ... Up 9200/tcp, 9300/tcp
elastic_kibana_1 /usr/local/bin/dumb-init - ... Up 0.0.0.0:80->5601/tcp
elastic_logstash_1 /usr/local/bin/docker-entr ... Up 5044/tcp, 9600/tcp
strike:elastic marseille$ docker-compose logs -f
〜〜略〜〜
# このログはkibanaが接続待受開始を示すログ
kibana_1 | {"type":"log","@timestamp":"2020-06-14T14:04:54Z","tags":["listening","info"],"pid":6,"message":"Server running at http://0:5601"}
kibana_1 | {"type":"log","@timestamp":"2020-06-14T14:04:55Z","tags":["info","http","server","Kibana"],"pid":6,"message":"http server running at http://0:5601"}
# このログはlogstashがelasticsearchにうまく接続できた意味を示すログ(認証がうまく通っている)
logstash_1 | [2020-06-14T14:04:50,416][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
最初的设置
启用暗夜模式并关闭统计信息收集。
启用深色模式
管理 -> Kibana -> 高级设置 -> 点击暗黑模式按钮,启用
停止统计信息收集
管理 -> Kibana -> 高级设置 -> 禁用使用数据