ElasticStack 5.x集群+Kibana-5.5.x+Logstash5.5+kafka2.10版本部署概述

Posted by Yancy on 2017-05-11

ElasticStack 5.x介绍

前言


ELK=ElasticSearch 官方博客:分布式以及 Elastic

Elastic Stack是ELK日志系统的官方称呼,而ELK则是盛名在外的一款开源分布式日志系统,一般说来包括了Elasticsearch、Logstash和Kibana,涵盖了后端日志采集、日志搜索服务和前端数据展示等功能。
本文将会对Elastic Stack的安装部署流程进行一系列简单的介绍,并记录下了一些部署过程中遇到的坑及解决方法。

对于一个软件或互联网公司来说,对计算资源和应用进行监控和告警是非常基础的需求。对于大公司或成熟公司,一个高度定制化的监控系统应该已经存在了很长时间并且非常成熟了。而对于一个初创公司或小公司来说,如何利用现有开源工具快速搭建一套日志监控及分析平台是需要探索的事情。

监控系统的用户:

  • 运维,开发,产品

监控系统应该可以解决如下的问题:

  • 监控server的各项基础指标,比如memory,cpu,load,network
  • 监控应用的状态。
  • 搜集应用日志,并进行分析和统计。通过日志分析和统计可得到应用的访问统计,异常统计,业务统计。具有进行大规模日志数据的分析和处理能力。
  • 可制定告警规则。各种监控数据进入系统后,可以根据条件触发告警,实时的将应用异常情况推送到运维、开发或业务人员的IM/SMS上。
  • 可定制的看板。可以将各种实时统计或报表直观的显示出来。

可选方案:

日志宝,日志易,Logtail(阿里云) 这是我们后面换 Graylog这个是一批黑马 也分享出来。

优势:使用简单
劣势:需上传日志到外部,不灵活,不易扩展,需付费

flume-ng + kafka + spark streaming + hbase(es/mysql) + zepplin/自研web展示

优势:灵活,易于扩展,数据分析和处理能力强
劣势:开发难度高,周期长,维护成本高

ELK优势和劣势:

优势:开源成熟解决方案,使用简单,扩展能力强
劣势:日志分析和处理依靠logstash完成,处理能力较低,无法适应复杂的日志分析场景
结论:初步选择ELK搭建起监控平台,其能够满足当前较为简单的监控和分析需求。未来如果不能适应,再考虑其他方案。

在本次实践中,我们所部署的ELK分布式日志系统,其架构大致如下:


首先在各日志产生机上部署收集器Filebeat,然后Filebeat将监控到的log文件变化数据传至Kafka集群,Logstash负责将数据从kafka中拉取下来,并进行字段解析,向Elasticsearch输出结构化后的日志,Kibana负责将Elasticsearch中的数据进行可视化。

【重点参考】:ELK中文书

一、Elasticsearch集群1部署

首先在https://www.elastic.co中找到ES的安装包。下文中所用的安装包均为Linux 64的tar.gz压缩包,解压即可用。官网安装方法:Installation example with tar

1
2
3
4
5
6
7
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.2.tar.gz
tar -xvf elasticsearch-5.5.2.tar.gz
cd /usr/local/elasticsearch-5.5.2/bin
useradd elasticsearch
chown -R /usr/local/elasticsearch-5.5.2/
su - elasticsearch -c "/usr/local/elasticsearch-5.5.2/bin/elasticsearch -d"
这里我切换普通es用户启动,记得给予权限。

Elasticsearch至少需要Java 8。在撰写本文时,建议您使用Oracle JDK版本1.8.0_131。Java安装因平台而异,所以我们在这里不再赘述。Oracle的推荐安装文档可以在Oracle的网站上找到。在安装Elasticsearch之前,请先检查您的Java版本,然后再运行(如果需要,请相应地进行安装/升级):

1
2
java -version
echo $JAVA_HOME
  • JVM参数设置

ElasticSearch5.0.0需要设置服务器max_map_count
ElasticSearch5.0.0要求最小为262144 默认内存是2G 这里我给6G内存.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
vim config/jvm.options
-Xms6g
-Xmx6g
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=75
-XX:+UseCMSInitiatingOccupancyOnly
-XX:+AlwaysPreTouch
-server
-Xss1m
-Djava.awt.headless=true
-Dfile.encoding=UTF-8
-Djna.nosys=true
-Djdk.io.permissionsUseCanonicalPath=true
-Dio.netty.noUnsafe=true
-Dio.netty.noKeySetOptimization=true
-Dio.netty.recycler.maxCapacityPerThread=0
-Dlog4j.shutdownHookEnabled=false
-Dlog4j2.disable.jmx=true
-Dlog4j.skipJansi=true
-XX:+HeapDumpOnOutOfMemoryError
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@logstash ~]# curl http://localhost:9200?pretty
{
"name" : "s-28M-e",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "0U3blQviRcSG_pq8KFQ5EA",
"version" : {
"number" : "5.5.2",
"build_hash" : "b2f0c09",
"build_date" : "2017-08-14T12:33:14.154Z",
"build_snapshot" : false,
"lucene_version" : "6.6.0"
},
"tagline" : "You Know, for Search"
}

1.1 Elasticsearch的配置

ES的配置文件在解压根目录下的config文件夹中,其中elasticsearch.yml是主配置文件。
以基本可用作为部署目标,在该文件中仅需要设置几个重要参数:

  1. cluster.name、node.name这两者顾名思义,作为集群和节点的标识符。
  2. Paths部分下的path.data和path.logs,表示ES的数据存放位置,前者为数据存储位置,后者为ES的log存储位置。请尽量放到剩余空间足够的地方,此外在进行调优时有一种方法是将数据放置到SSD上。
  3. bootstrap.memory_lock: true,设为true以确保ES拥有足够的JVM内存。
  4. network.host: localhost和http.port,在此处设置ES对外服务的IP地址与端口
    设置完以上几项参数后,即可在ES根目录下使用命令./bin/elasticsearch启动ES进程。也有相应的后台启动方式,具体不赘述。
  • 主要配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[elasticsearch@logstash elasticsearch-5.5.2]$ cat config/elasticsearch.yml | grep -Pv "^$|^#"
cluster.name: jolly-cluster
node.master: true
node.data: true
node.name: es-jollychic-node1
path.data: /data/elasticsearch/es-data
path.logs: /data/elasticsearch/es-logs
bootstrap.memory_lock: true
bootstrap.system_call_filter: false
network.host: 10.11.10.26,127.0.0.1
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.11.10.26", "10.11.10.45"]
http.cors.enabled: true
http.cors.allow-origin: "*"
  • 修改Linux系统参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
max file descriptors [4096] for elasticsearch process likely too low, increase to at least [65536]
max number of threads [1024] for user [lishang] likely too low, increase to at least [2048]
解决:切换到root用户,编辑limits.conf 添加类似如下内容
vi /etc/security/limits.conf
添加如下内容:
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
问题三:max number of threads [1024] for user [lish] likely too low, increase to at least [2048]
解决:切换到root用户,进入limits.d目录下修改配置文件。
vi /etc/security/limits.d/90-nproc.conf
修改如下内容:
* soft nproc 1024
#修改为
* soft nproc 2048
问题四:max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
解决:切换到root用户修改配置sysctl.conf
vi /etc/sysctl.conf
添加下面配置:
vm.max_map_count=655360
并执行命令:
sysctl -p
然后,重新启动elasticsearch,即可启动成功。

集群健康检查 Cluster Health

要检查群集的运行状况,我们将使用_catAPI。您可以在Kibana的控制台中运行以下命令,方法是 单击“查看控制台”或curl单击下面的“复制为CURL”链接并将其粘贴到终端中。

1
2
3
curl -sXGET "http://10.11.10.26:9200/_cat/health?v"
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1509960188 17:23:08 jolly-cluster green 2 2 4081 3986 0 2 3889 0 - 100%

我们可以看到,我们的集群名为“elasticsearch”是绿色的。

每当我们要求群集健康,我们要么绿色,黄色,或红色

  • 绿色 - 一切都很好(集群功能齐全)
  • 黄色 - 所有数据都可用,但一些副本尚未分配(群集完全可用)
  • 红色 - 某些数据不管出于何种原因(群集部分功能)

####### ✨✨注意:当一个群集为红色时,它将继续提供来自可用碎片的搜索请求,但是您可能需要尽快修复它,因为有未分配的碎片。

查看集群中的节点列表:

1
2
3
[root@logstash ~]# curl -XGET http://10.11.10.26:9200/_cat/nodes?v
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
10.11.10.26 51 96 18 5.02 5.60 3.58 mdi * es-jollychic-node1

创建索引:
第一个命令使用PUT创建了一个叫做“customer”的索引。我们简单地将pretty附加到调用的尾部,使其以美观的形式打印出JSON响应

1
curl -XPUT 'http://10.11.10.26:9200/customer?pretty'
1
2
3
4
5
[root@logstash ~]# curl -XGET http://10.11.10.26:9200/_cat/master?help
id | | node id
host | h | host name
ip | | ip address
node | n | node name

查看所有连接的索引:

1
2
3
4
5
6
7
8
9
10
[elasticsearch@logstash ~]$ curl -sXGET "http://$(hostname):9200/_cat/indices?v"
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open log-wms31-web-product-2017.08.25 LIKJyNXrRcmQSt8aXRoyLg 5 1 614 0 361.6kb 361.6kb
yellow open log-payment-center-product-2017.08.26 w-ucGJUoTDOdhEkfrq9g-g 5 1 1712756 0 808.4mb 808.4mb
yellow open .kibana p9MnvKHRS6K_jCeBtB7CXA 1 1 18 1 77.8kb 77.8kb
yellow open log-jcm-product-2017.08.25 Cs0XHa-xRQOHxt1-HYz1Xw 5 1 46303455 0 8.1gb 8.1gb
yellow open log-spm_mq-product-2017.08.25 FXYNV08zQselbnVKK7k01g 5 1 465127 0 148.1mb 148.1mb
yellow open log-erpsearchservice-product-2017.08.26 Z4ECtHCJS2uma_UTxJqDLw 5 1 2217 0 15.3mb 15.3mb
yellow open log-wms31-web-product-2017.08.24 mYAhjM5UQFyIZAN8nFeYQQ 5 1 951572 0 237.5mb 237.5mb
yellow open log-spm_mq-product-2017.08.26 -PJCMMVqRwWXux8V5SRbCA 5 1 1457469 0 503.1mb 503.1mb

删除指定索引:

1
curl -XDELETE "http://$(hostname):9200/log-wms-product-2017.08.19"
注意✨✨ : 你可能已经注意到在上面的结果中,状态被标记为危险的黄色,而不是安全的绿色。实际上我们的安装步骤没有问题,之所以会显示黄色,实际上是因为从集群的角度看,这个集群目前只有一个节点,数据有丢失的风险。不过如果我们只是在一些安全性要求不太高的项目上使用,那么一个节点是可以接受的。

二、Elasticsearch集群node2部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.2.tar.gz
tar -xvf elasticsearch-5.5.2.tar.gz
cd /usr/local/elasticsearch-5.5.2/bin
useradd elasticsearch
chown -R /usr/local/elasticsearch-5.5.2/
su - elasticsearch -c "/usr/local/elasticsearch-5.5.2/bin/elasticsearch -d"
这里我切换普通es用户启动,记得给予权限。
mkdir /data/es-jollychic
vim config/jvm.options
修改内存优化
-Xms6g
-Xmx6g
-XX:+UseConcMarkSweepGC
-XX:CMSInitiatingOccupancyFraction=75
-XX:+UseCMSInitiatingOccupancyOnly
-XX:+AlwaysPreTouch
修改elasticsearch.yml配置
[elasticsearch@logstash elasticsearch-5.5.2]$ cat config/elasticsearch.yml | grep -Pv "^$|^#"
cluster.name: jolly-cluster
node.master: false
node.data: true
node.name: es-jollychic-node2
path.data: /data/elasticsearch/es-data
network.host: 10.11.10.45,127.0.0.1
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.11.10.26", "10.11.10.45"]
查看启动进程服务:
[root@logstash2 config]# netstat -ntulp | grep java
tcp 0 0 ::ffff:10.11.10.45:9200 :::* LISTEN 18118/java
tcp 0 0 ::ffff:127.0.0.1:9200 :::* LISTEN 18118/java
tcp 0 0 ::ffff:10.11.10.45:9300 :::* LISTEN 18118/java
tcp 0 0 ::ffff:127.0.0.1:9300 :::* LISTEN 18118/java
查看集群中的节点列表:
我们也可以得到我们单节点的列表如下:
[root@es_01 data]# curl -XGET http://10.11.10.26:9200/_cat/nodes?v
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
10.11.10.45 40 98 23 5.90 4.75 4.75 di - es-jollychic-node2
10.11.10.26 54 97 42 2.32 2.60 2.95 mdi * es-jollychic-node1
查看集群节点索引:
[elasticsearch@logstash ~]$ curl -sXGET "http://$(hostname):9200/_cat/indices?v"
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open log-wms31-web-product-2017.08.25 LIKJyNXrRcmQSt8aXRoyLg 5 1 614 0 361.6kb 361.6kb
green open log-payment-center-product-2017.08.26 w-ucGJUoTDOdhEkfrq9g-g 5 1 1712756 0 808.4mb 808.4mb
green open .kibana p9MnvKHRS6K_jCeBtB7CXA 1 1 18 1 77.8kb 77.8kb
green open log-jcm-product-2017.08.25 Cs0XHa-xRQOHxt1-HYz1Xw 5 1 46303455 0 8.1gb 8.1gb
green open log-spm_mq-product-2017.08.25 FXYNV08zQselbnVKK7k01g 5 1 465127 0 148.1mb 148.1mb
green open log-erpsearchservice-product-2017.08.26 Z4ECtHCJS2uma_UTxJqDLw 5 1 2217 0 15.3mb 15.3mb
green open log-wms31-web-product-2017.08.24 mYAhjM5UQFyIZAN8nFeYQQ 5 1 951572 0 237.5mb 237.5mb
green open log-spm_mq-product-2017.08.26 -PJCMMVqRwWXux8V5SRbCA 5 1 1457469 0 503.1mb 503.1mb

1.1 Elasticsearch 5.x的Bootstrap Checks

Elasticsearch在升级到5.x版本后,启动时会强制执行Bootstrap Checks(官方文档)
其中经常性的问题是需要增大系统可使用的最大FileDescriptors数(参考https://www.elastic.co/guide/en/elasticsearch/reference/current/file-descriptors.html)
剩下的其他问题可以查询官方文档。

1.2 Elasticsearch的X-pack插件

X-pack是官方提供的一系列集成插件,包括了alert、monitor、secure等功能,十分强大(但是并不免费)。
在ELK 5.0中安装大部分插件仅需要输入命令:./bin/elasticsearch-plugin install <plugin name>即可
X-pack插件安装后会自动开启ELK的权限功能,需要注意的是如果启用了X-pack,则在向ES输入数据或发起API请求时,均需要附带相应的auth信息。
考虑到X-pack并非免费且价格昂贵,暂时不安装X-pack包。

第一步:Elasticsearch安装 x-pack

在 Elasticsearch 的根目录,运行 bin/elasticsearch-plugin 进行安装:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[elasticsearch@logstash elasticsearch-5.5.2]$ ./bin/elasticsearch-plugin install x-pack
-> Downloading x-pack from elastic
[=================================================] 100%
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: plugin requires additional permissions @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
* java.io.FilePermission \\.\pipe\* read,write
* java.lang.RuntimePermission accessClassInPackage.com.sun.activation.registries
* java.lang.RuntimePermission getClassLoader
* java.lang.RuntimePermission setContextClassLoader
* java.lang.RuntimePermission setFactory
* java.security.SecurityPermission createPolicy.JavaPolicy
* java.security.SecurityPermission getPolicy
* java.security.SecurityPermission putProviderProperty.BC
* java.security.SecurityPermission setPolicy
* java.util.PropertyPermission * read,write
* java.util.PropertyPermission sun.nio.ch.bugLevel write
* javax.net.ssl.SSLPermission setHostnameVerifier
See http://docs.oracle.com/javase/8/docs/technotes/guides/security/permissions.html
for descriptions of what these permissions allow and the associated risks.
Continue with installation? [y/N]y
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: plugin forks a native controller @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
This plugin launches a native controller that is not subject to the Java
security manager nor to system call filters.
Continue with installation? [y/N]y
-> Installed x-pack

服务启动后,我们可以通过 elasticsearch 提供的 API 来确认一下基本信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
shell> curl http://localhost:9200/
{
"name" : "...",
"cluster_name" : "...",
"cluster_uuid" : "...",
"version" : {
"number" : "...",
"build_hash" : "...",
"build_date" : "...",
"build_snapshot" : false,
"lucene_version" : "..."
},
"tagline" : "You Know, for Search"
}
重启服务
1
su - elasticsearch -c "/usr/local/elasticsearch-5.5.2/bin/elasticsearch -d

缺省情况下,elasticsearch 服务会监听9200端口,如果你想自定义监听地址和端口,那么可以设置 elasticsearch.yml 配置文件中的 network.hosthttp.port 选项。

elasticsearch服务推荐安装 x-pack 插件,它在安全监控等方面为 elasticsearch提供了完善的支持:访问地址:http://10.11.10.26:9200/?pretty 会发现在安装了 x-pack 之后访问受到限制:这里默认的用户名:elastic,密码:changeme

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[elasticsearch@logstash ~]$ curl -u elastic http://10.11.10.26:9200/
Enter host password for user 'elastic':
{
"name" : "es-jollychic-node1",
"cluster_name" : "jolly-cluster",
"cluster_uuid" : "hxR0DDN7TTa3tNnYtMIbbA",
"version" : {
"number" : "5.5.2",
"build_hash" : "b2f0c09",
"build_date" : "2017-08-14T12:33:14.154Z",
"build_snapshot" : false,
"lucene_version" : "6.6.0"
},
"tagline" : "You Know, for Search"
}

不过使用缺省密码是不安全的,所以我们应该修改它,可以通过 curl 修改默认密码:elastic

1
2
3
[elasticsearch@logstash ~]$ curl -XPUT -u elastic -d '{"password": "elastic"}' \
> 'http://10.11.10.26:9200/_xpack/security/user/elastic/_password'
Enter host password for user 'elastic':

启用和禁用

启用和禁用X-Pack功能

默认情况下,所有X-Pack功能都被启用。您可以启用或禁用特定的X-Pack功能elasticsearch.ymlkibana.yml以及logstash.yml 配置文件。

1
2
3
4
5
6
7
设置 描述
xpack.graph.enabled 设置为false禁用X-Pack图形功能。
xpack.ml.enabled 设置为false禁用X-Pack机器学习功能。
xpack.monitoring.enabled 设置为false禁用X-Pack监视功能。
xpack.reporting.enabled 设置为false禁用X-Pack报告功能。
xpack.security.enabled 设置为false禁用X-Pack安全功能。
xpack.watcher.enabled 设置false为禁用观察器。

第二步:Kibana 安装x-pack

1
2
3
4
5
6
7
8
9
10
11
[root@logstash ~]# /usr/local/kibana-5.5.2/bin/kibana-plugin install x-pack
Attempting to transfer from x-pack
Attempting to transfer from https://artifacts.elastic.co/downloads/kibana-plugins/x-pack/x-pack-5.5.2.zip
Transferring 119363535 bytes....................
Transfer complete
Retrieving metadata from plugin archive
Extracting plugin archive
Extraction complete
Optimizing and caching browser bundles...
Plugin installation complete
You have new mail in /var/spool/mail/root
修改密码

修改kibana密码:修改之前需要在kibana.yml中配置elasticsearch的用户名和密码后才能需改密码,否则会报错。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# If your Elasticsearch is protected with basic authentication, these settings provide
# the username and password that the Kibana server uses to perform maintenance on the Kibana
# index at startup. Your Kibana users still need to authenticate with Elasticsearch, which
# is proxied through the Kibana server.
elasticsearch.username: "elastic"
elasticsearch.password: "your password"
## 查询所有用户
[root@logstash config]# curl -XGET -u elastic:elastic '10.11.10.26:9200/_xpack/security/user?pretty'
{
"elastic" : {
"username" : "elastic",
"roles" : [
"superuser"

Monitoring(免费版本只支持单 ES 集群)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
集群级别:
Uptime : 集群运行时间;
节点级别:
Disk Available:可用磁盘;
JVM Heap: JVM 使用情况;
索引级别:
Indices:索引数量,相当于数据库数;
Documents:文档数量,相当于记录数;
Disk Usage:磁盘使用情况;
Primary Shards:分片数;
Replica Shards:冗余分片数;
Overview
相较于集群健康视图,这里的指标更多:
Serach Rate (/s):近1小时的查询速率,QPS;
Search Latency (ms):近1小时的查询延迟;
Index Rate (/s):近1小时的索引速率,IPS;
Index Latency (ms):近1小时的索引延迟;
Shard Activity:对于 Shard 的操作历史;
Indices
索引视角的监控视图,包含以下指标:
Document Count:文档数;
Data:数据量;
Index Rate:索引速率;
Search Rate:查询速率;
Unassigned Shards:未分配的分片数;
点击 Index Name 可以进入查看对于索引的详细基础监控:
Index Memory (KB):索引内存使用,分为 Lucene、Term、Points;
Index Size (MB):索引大小;
Search Rate (/s):查询速率;
Indexing Rate (/s):索引速率;
Segment Count:段数;
Document Count:文档数;
Shard Legend:分片状态图谱,分为 Primary, Replica,Relocating,Initializing,Unassigned Primary,Unassigned Replica 多个状态。
点击 Advanced 可以看到高级监控页面,请读者自己去感受下。
Nodes
节点监控,首先看到的是概述指标:
CPU Usage: CPU 使用率;
Load Average:CPU 平均负载;
JVM Memory:JVM 使用情况;
Disk Free Space:磁盘空闲空间;
Shards:分片数;
点击某个节点我们可以看到详细基础监控:
JVM Heap (GB):JVM 使用情况;
Index Memory (KB):索引占用内存;
CPU Utilization (%):CPU 使用率;
System Load:系统负载;
Latency (ms):延迟,分为索引和查询;
Segment Count:段数量;
Shard Legend:分片状态图谱, Primary, Replica,Relocating,Initializing多个状态。

logstash 数据传输出现问题:

1
Attempted to send a bulk request to Elasticsearch configured at '["http://10.11.10.26:9200"]', but an error occurred and it failed! Are you sure you can reach elasticsearch from this machine using the configuration provided? {:error_message=>"[401] {\"error\":{\"root_cause\":[{\"type\":\"security_exception\",\"reason\":\"missing authentication token for REST request [/_bulk]\",\"header\":{\"WWW-Authenticate\":\"Basic realm=\\\"security\\\" charset=\\\"UTF-8\\\"\"}}],\"type\":\"security_exception\",\"reason\":\"missing authentication token for REST request [/_bulk]\",\"header\":{\"WWW-Authenticate\":\"Basic realm=\\\"security\\\" charset=\\\"UTF-8\\\"\"}},\"status\":401}", :error_class=>"Elasticsearch::Transport::Tran

另外需要注意 x-pack 的授权一个月后会过期,此时查看 kibana 会显示:

Login is disabled because your license has expired. Please extend your license or disable Security in Elasticsearch.

此时可以重新获取一个授权,比如免费版授权,但是功能有阉割。更新授权的时候,可能会发现更新不会被确认,这是因为需要加上 acknowledge=true 参数。使用免费授权的后遗症就是基本的安全性没有了,可以用 Nginx 代理做一个HTTP Basic认证来弥补.

访问效果:

登录需要输入认证密码统一:Username:elastic password:elastic

JVM堆,索引内存(KB),CPU利用率(%),系统负载,延迟(ms)等等

1.3 Elasticsearch的Head插件

Head插件作为ELK 2.x版本中较为通用的前端管理插件,在ELK 5.x版本中无法直接使用./bin/elasticsearch-plugin install head的方式安装,但是可以采取standalone的方式进行运行。

参考官方文档:elasticsearch-head

一篇较好的ES 5.x安装Head的博文:

【特别注意】:暂时没有找到x-pack和head相互兼容的方法,目前由于认证的问题,如果启用了x-pack的secure功能,会导致head插件无法连接ES集群。

1
2
3
4
5
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install
npm run start
open http://localhost:9100/
  • 修改head目录下的Gruntfile.js配置,head默认监听127.0.0.1 新增:hostname: ‘0.0.0.0’
1
2
3
4
5
6
7
8
9
10
11
12
13
# vim Gruntfile.js
connect: {
server: {
options: {
hostname: '0.0.0.0',
port: 9100,
base: '.',
keepalive: true
}
}
}
});
  • 修改elasticsearch配置文件 elasticsearch.yml
1
2
http.cors.enabled: true
http.cors.allow-origin: "*"
  • 重启elasticsearch,并启动node
1
2
3
ln -s /usr/local/elasticsearch-head/node_modules/grunt/bin/grunt /usr/bin/grunt
后台启动:grunt server &
  • 访问效果:

三、 Elasticsearch-Kibana

RPM方法安装参考官网文档:使用RPM 编辑安装Kibana

Running Kibana on Docker: Docker 搭建方法

tar方式安装Kibana

1
2
3
4
wget https://artifacts.elastic.co/downloads/kibana/kibana-5.5.2-linux-x86_64.tar.gz
sha1sum kibana-5.5.2-linux-x86_64.tar.gz
tar -xzf kibana-5.5.2-linux-x86_64.tar.gz
cd kibana/

1.1 通过配置文件编辑配置Kibana

kibana.yml启动时Kibana服务器从文件读取属性。默认设置配置Kibana运行localhost:5601。要更改主机或端口号,或者连接到在其他机器上运行的Elasticsearch,您需要更新kibana.yml文件。您还可以启用SSL并设置各种其他选项。

kibana.yml 全部基本配置 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
server.port:
默认值:5601 Kibana由后端服务器提供服务。此设置指定要使用的端口。
server.host:
默认值:“localhost”此设置指定后端服务器的主机。
server.basePath:
如果您在代理服务器后面运行,则允许您指定安装Kibana的路径。这仅影响由Kibana生成的URL,您的代理预期在将请求转发给Kibana之前删除basePath值。此设置无法以斜杠(/)结尾。
server.maxPayloadBytes:
默认值:1048576传入服务器请求的最大有效负载大小(以字节为单位)。
server.name:
默认值:“your-hostname”用于标识此Kibana实例的人性化显示名称。
server.defaultRoute:
默认值:“/ app / kibana”此设置指定打开Kibana时的默认路由。打开Kibana时,您可以使用此设置修改着陆页。
elasticsearch.url:
默认值:“http:// localhost:9200”用于所有查询的Elasticsearch实例的URL。
elasticsearch.preserveHost:
默认值:true当此设置的值为真时,Kibana使用server.host设置中指定的主机名。当此设置的值为false,Kibana使用连接到此Kibana实例的主机的主机名。
kibana.index:
默认:“.kibana” Kibana使用Elasticsearch中的索引来存储已保存的搜索,可视化和仪表板。如果索引不存在,Kibana将创建一个新的索引。
kibana.defaultAppId:
默认值:“discover”要加载的默认应用程序。
tilemap.url:
Kibana用于在tilemap可视化中显示地图图块的tile服务的URL。默认情况下,Kibana从外部元数据服务读取此URL,但用户仍然可以覆盖此参数以使用自己的Tile Map Service。例如:"https://tiles.elastic.co/v2/default/{z}/{x}/{y}.png?elastic_tile_service_tos=agree&my_app_name=kibana"
tilemap.options.minZoom:
默认值:1最小缩放级别。
tilemap.options.maxZoom:
默认值:10最大缩放级别。
tilemap.options.attribution:
默认值:"© [Elastic Maps Service](https://www.elastic.co/elastic-maps-service)"地图属性字符串。
regionmap
指定用于区域映射可视化的其他矢量图层。每个层对象都指向一个外部矢量文件,其中包含一个geojson FeatureCollection。该文件必须使用WGS84坐标参考系,并且只包括多边形。如果文件托管在与Kibana不同的域上,则服务器需要启用CORS,因此Kibana可以下载该文件。url字段也用作文件的唯一标识符。每个图层可以包含多个字段,以指示要公开的geojson要素的哪些属性。field.description是在Region Map可视化的字段菜单中显示的人类可读文本。也可以添加可选的归因值。以下示例显示有效的regionmap配置。
regionmap:
层:
- 名称:“法国部”
url:“http://my.cors.enabled.server.org/france_departements.geojson”
归因:“INRAP”
字段:
- 名称:“部门”
说明:“全部名称”
- 名称:“INSEE”
说明:“INSEE数字标识符”
elasticsearch.username: 和 elasticsearch.password:
如果您的Elasticsearch受到基本身份验证的保护,这些设置将提供Kibana服务器在启动时对Kibana索引执行维护所用的用户名和密码。您的Kibana用户仍然需要使用通过Kibana服务器代理的Elasticsearch进行身份验证。
server.ssl.enabled
默认值:“false”启用从Kibana服务器到浏览器的传出请求的SSL。当设置为true
server.ssl.certificate并server.ssl.key要求
server.ssl.certificate: 和 server.ssl.key:
路由到PEM格式的SSL证书和SSL密钥文件。
server.ssl.keyPassphrase
将用于解密私钥的密码短语。该值是可选的,因为密钥可能未被加密。
server.ssl.certificateAuthorities
列出可信赖的PEM编码证书文件的路径。
server.ssl.supportedProtocols
默认值:TLSv1,TLSv1.1,TLSv1.2 支持的版本协议。有效协议:TLSv1,TLSv1.1,TLSv1.2
server.ssl.cipherSuites
默认值:ECDHE-RSA-AES128-GCM-SHA256,ECDHE-ECDSA-AES128-GCM-SHA256,ECDHE-RSA-AES256-GCM-SHA384,ECDHE-ECDSA-AES256-GCM-SHA384,DHE-RSA-AES128-GCM- SHA256,ECDHE-RSA-AES128-SHA256,DHE-RSA-AES128-SHA256,ECDHE-RSA-AES256-SHA384,DHE-RSA-AES256-SHA384,ECDHE-RSA-AES256-SHA256,DHE-RSA-AES256-SHA256, HIGH,!aNULL,!eNULL,!EXPORT,!DES,!RC4,!MD5,!PSK,!SRP,!CAMELLIA。格式和有效选项的详细信息可通过[OpenSSL密码列表格式文档]( https://www.openssl.org/docs/man1.0.2/apps/ciphers.html#CIPHER-LIST-FORMAT)获得。
elasticsearch.ssl.certificate: 和 elasticsearch.ssl.key:
提供PEM格式SSL证书和密钥文件路径的可选设置。这些文件验证您的Elasticsearch后端使用相同的密钥文件。
elasticsearch.ssl.keyPassphrase
将用于解密私钥的密码短语。该值是可选的,因为密钥可能未被加密。
elasticsearch.ssl.certificateAuthorities:
可选设置,使您能够指定Elasticsearch实例的证书颁发机构的PEM文件的路径列表。
elasticsearch.ssl.verificationMode:
默认值:full控制证书的验证。有效值是none,certificate和full。 full执行主机名验证,certificate不执行。
elasticsearch.pingTimeout:
默认值:elasticsearch.requestTimeout设置时间(以毫秒为单位)等待弹性搜索响应ping的值。
elasticsearch.requestTimeout:
默认值:30000等待后端或弹性搜索的响应的时间(毫秒)。该值必须为正整数。
elasticsearch.requestHeadersWhitelist:
默认值:[ 'authorization' ]要发送到Elasticsearch的Kibana客户端标题列表。要发送没有客户端标题,请将此值设置为[](空列表)。
elasticsearch.customHeaders:
默认值:{}要发送到Elasticsearch的标题名称和值。无论elasticsearch.requestHeadersWhitelist配置如何,客户端头都不能覆盖任何自定义头文件。
elasticsearch.shardTimeout:
默认值:0 Elasticsearch等待分片响应的时间(以毫秒为单位)。设置为0以禁用。
elasticsearch.startupTimeout:
默认值:5000重试之前等待Kibana启动时的弹性搜索的时间(以毫秒为单位)。
pid.file:
指定Kibana创建进程ID文件的路径。
logging.dest:
默认值:stdout允许您指定Kibana存储日志输出的文件。
logging.silent:
默认值:false将此设置的值设置true为禁止所有日志输出。
logging.quiet:
默认值:false将此设置的值设置true为禁止除错误消息之外的所有日志输出。
logging.verbose
默认值:false将此设置的值设置为true记录所有事件,包括系统使用情况信息和所有请求。
ops.interval
默认值:5000设置采样系统和进程性能指标的间隔(以毫秒为单位)。最小值为100。
status.allowAnonymous
默认值:false如果启用了身份验证,true请将其设置为允许未经身份验证的用户访问Kibana服务器状态API和状态页面。
cpu.cgroup.path.override
覆盖cgroup cpu路径,以不一致的方式安装 /proc/self/cgroup
cpuacct.cgroup.path.override
在与不一致的方式安装时,覆盖cgroup cpuacct路径 /proc/self/cgroup
console.enabled
默认值:true设置为false以禁用控制台。切换此操作将导致服务器在下次启动时重新生成资源,这可能会在页面开始投放之前造成延迟。
elasticsearch.tribe.url:
用于所有查询的Elasticsearch部落实例的可选URL。
elasticsearch.tribe.username: 和 elasticsearch.tribe.password:
如果您的Elasticsearch受到基本身份验证的保护,这些设置将提供Kibana服务器在启动时对Kibana索引执行维护所用的用户名和密码。您的Kibana用户仍然需要使用通过Kibana服务器代理的Elasticsearch进行身份验证。
elasticsearch.tribe.ssl.certificate: 和 elasticsearch.tribe.ssl.key:
提供PEM格式SSL证书和密钥文件路径的可选设置。这些文件验证您的Elasticsearch后端使用相同的密钥文件。
elasticsearch.tribe.ssl.keyPassphrase
将用于解密私钥的密码短语。该值是可选的,因为密钥可能未被加密。
elasticsearch.tribe.ssl.certificateAuthorities:
可选设置,使您能够为您的部落Elasticsearch实例的证书颁发机构指定PEM文件的路径。
elasticsearch.tribe.ssl.verificationMode:
默认值:full控制证书的验证。有效值是none,certificate和full。full执行主机名验证,
certificate不执行。
elasticsearch.tribe.pingTimeout:
默认值:elasticsearch.tribe.requestTimeout设置时间(以毫秒为单位)等待弹性搜索响应ping的值。
elasticsearch.tribe.requestTimeout:
默认值:30000等待后端或弹性搜索的响应的时间(毫秒)。该值必须为正整数。
elasticsearch.tribe.requestHeadersWhitelist:
默认值:[ 'authorization' ]要发送到Elasticsearch的Kibana客户端标题列表。要发送没有客户端标题,请将此值设置为[](空列表)。
elasticsearch.tribe.customHeaders:
默认值:{}要发送到Elasticsearch的标题名称和值。无论
elasticsearch.tribe.requestHeadersWhitelist配置如何,客户端头都不能覆盖任何自定义头文件。

根据不同的需求配置:

1
2
3
4
5
6
7
[root@logstash config]# cat kibana.yml | grep -Pv "^#|^$"
server.port: 5601
server.host: "10.11.10.26"
server.name: "jollychic-log"
elasticsearch.url: "http://10.11.10.26:9200"
elasticsearch.preserveHost: true
kibana.index: ".kibana"

配置好配置,启动服务:./bin/kibana & 后台启动

1.2 访问Kibana

  • 检查Kibana状态

您可以通过导航到达Kibana服务器的状态页面localhost:5601/status。状态页面显示有关服务器资源使用情况的信息,并列出已安装的插件。

http://10.11.10.26:5601/status

  • 配置索引模式
    指定与一个或多个弹性搜索索引的名称相匹配的索引模式。默认情况下,Kibana猜测您正在使用由Logstash提供给Elasticsearch的数据。如果是这样,您可以使用默认值logstash-作为索引模式。星号()匹配索引名称中的零个或多个字符。如果您的弹性搜索索引遵循其他命名约定,请输入适当的模式。“模式”也可以简单地是单个索引的名称。
    选择包含要用于执行基于时间的比较的时间戳的索引字段。Kibana读取索引映射以列出包含时间戳的所有字段。如果您的索引没有基于时间的数据,请禁用索引包含基于时间的事件选项。

  • 选择索引查看日志

官网中在生产环境中使用Kibana 说的很详细:在生产环境中使用Kibana

上面是我logstash已经搭建配置好索引才能获取到。下面讲如何部署logstash

四、Logstash的部署

与Elasticsearch类似,在官网下载压缩包后,解压即可用。

在非高级场景下,Logstash本身不需要进行太多的配置(配置文件在logstash根目录下的./config/logstash.yml),高级场景请参考官方文档。
logstash的启动命令为:./bin/logstash -f <pipeline_conf_file> --config.reload.automatic,其中-f指定了pipeline配置文件的位置,--config.reload.automatic指定了pipeline配置文件可以进行热加载。
本次我们使用Logstash作为日志解析模块(Logstash其实也可以作为日志采集器),重点需要配置pipeline的三大部分:input、filter和output。pipeline文件需要自己创建。

Installing Logstash

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
vim /etc/yum.repos.d/logstash.repo
[logstash-5.x]
name=Elastic repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
sudo yum install logstash

首先,我们通过运行最基本的Logstash管道来测试您的Logstash安装。

Logstash管道有两个必需的元素,input并且output,和一个可选的元素,filter。输入插件消耗来自源的数据,过滤器插件会按照您指定的方式修改数据,并且输出插件将数据写入到目的地。

要测试您的Logstash安装,运行最基本的Logstash管道。例如:

1
2
cd logstash-5.5.2
bin / logstash -e'input {stdin {}} output {stdout {}}'

-e标志使您能够直接从命令行指定配置。在命令行中指定配置可以快速测试配置,而无需在迭代之间编辑文件。示例中的流水线从标准输入端输入,stdin并stdout以结构化格式将该输入移动到标准输出 。

启动Logstash后,等到看到“Pipeline main started”,然后hello world在命令提示符下输入:

1
2
hello world
2017-07-21T01:22:14.405+0000 0.0.0.0 hello world

Logstash将时间戳和IP地址信息添加到消息中。通过在运行Logstash的shell中发出CTRL-D命令退出Logstash 。

logstash的配置片段:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#character at the beginning of a line indicates a comment. Use
# comments to describe your configuration.
input {
udp {
port => 25826
buffer_size => 1452
workers => 3 # Default is 2
queue_size => 30000 # Default is 2000
}
}
output {
elasticsearch {
hosts => [ "10.11.10.26:9200" ]
user => logstash
password => logstash
}
}

☺待整理续写~~ *更新自动化搭建es集群,架构梳理详解-与实现es监控服务

Communicative learning:

🐧 Linux shell_ senior operation and maintenance faction: QQ group 459096184 circle (system operation and maintenance - application operation and maintenance - automation operation and maintenance - virtualization technology research, welcome to join)
🐧 BigData-Exchange School:QQ group 521621407 circles (big data Yun Wei) (Hadoop developer) (big data research enthusiasts) welcome to join

Bidata have internal WeChat exchange group, learn from each other, join QQ group has links.