在分布式系统中,应用数量众多,应用调用链复杂,经常使用ELK做为日志收集、分析和展现的组件。本篇文章将讲讲解如何部署ELK,而后讲解如何 使用Filebeat采集Spring Boot的日志输出到Logstash上,logstash再将日志输出到Elasticsearch上,最后展现到kibana上面。整个日志采集流程以下图:
java
在传统的日志采集只会用ELK,那么为何须要使用filebeat呢,由于 logstash是java应用,解析日志是非的消耗cpu和内存,logstash安装在应用部署的机器上显得很是的影响应用的性能。最多见的作法是用filebeat部署在应用的机器上,logstash单独部署,而后由 filebeat将日志输出给logstash解析,解析完由logstash再传给elasticsearch。node
本文主要讲解如何部署ElasticSearch集群,部署的ElasticSearch的版本为7.3,计划用三台机器组成一个ElasticSearch集群,从而组成高可用,机器分配以下:git
节点 | 规则 | 数量 |
---|---|---|
192.168.1.1 | 2核4G | 1 |
192.168.1.2 | 2核4G | 1 |
192.168.1.3 | 2核4G | 1 |
或者使用tar.gz包的方式直接解压缩,多复制几份,修改其中的端口号,从而达到再一台主机上构建多个node节点github
下载安装执行如下命令:shell
# 下载elasticsearch-7.2.0-x86_64的rpm包 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.0-x86_64.rpm wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.0-x86_64.rpm.sha512 # shasum 检查版本信息 shasum -a 512 -c elasticsearch-7.3.0-x86_64.rpm # rpm本地安装 rpm --install elasticsearch-7.3.0-x86_64.rpm Creating elasticsearch group... OK Creating elasticsearch user... OK ### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd sudo systemctl daemon-reload sudo systemctl enable elasticsearch.service ### You can start elasticsearch service by executing sudo systemctl start elasticsearch.service Created elasticsearch keystore in /etc/elasticsearch
安装成功ElasticSearch成功后,执行一下命令启动elasticSearch,并设置为开启自启动:npm
systemctl daemon-reload systemctl enable elasticsearch.service systemctl start elasticsearch.service
elasticSearch的默认端口为9200,启动成功后,执行如下命令:vim
curl -X GET "localhost:9200/"
若是返回如下的信息,则证实安装成功:centos
{ "name" : "VM_0_5_centos", "cluster_name" : "elasticsearch", "cluster_uuid" : "gst98AuET6a648YmAkXyMw", "version" : { "number" : "7.3.0", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "508c38a", "build_date" : "2019-06-20T15:54:18.811730Z", "build_snapshot" : false, "lucene_version" : "8.0.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" }
查看节点的健康状态,执行命令 curl localhost:9200/_cluster/health
,若是返回如下信息,则Elasticsearch则为监控状态。浏览器
{ "cluster_name" : "elasticsearch", "status" : "green", "timed_out" : false, "number_of_nodes" : 1, "number_of_data_nodes" : 1, "active_primary_shards" : 0, "active_shards" : 0, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0 }
能够执行如下的命令,查看es的 journal:bash
sudo journalctl --unit elasticsearch
如下的路径的配置文件能够配置es的java_home,es_config_home :
/etc/sysconfig/elasticsearch
es自己的一些配置在如下的路径,在这里能够配置elasticsearch的堆内存,数据保留天数等信息:
/etc/elasticsearch
全部的配置文件描述和路径以下表所示:
配置类型 | 描述 | 路径 |
---|---|---|
home | elasticsearch的home目录 | /usr/share/elasticsearch |
bin | elasticsearch的bin目录 | /usr/share/elasticsearch/bin |
conf | elasticsearch的配置文件 | /etc/elasticsearch |
conf | elasticsearch的环境变量配置 | /etc/sysconfig/elasticsearch |
data | elasticsearch的数据目录 | /var/lib/elasticsearch |
logs | elasticsearch的日志目录 | /var/log/elasticsearch |
plugins | elasticsearch的插件目录 | /usr/share/elasticsearch/plugins |
在三台机器上分别装完elasticsearch,在主节点vim /etc/elasticsearch/
,配置一下的信息:
主节点的配置以下:
#三个集群须要一样的集群名 cluster.name: my-application # 每一个node的名字须要惟一 node.name: node-1 # 开启这个表示该节点可以参与选举主节点,并不表示这个就是主节点 node.master: true #容许该节点存储数据(默认开启) node.data: true #注意必定要是路径后面加上/var/lib/elasticsearch/nodes,要否则没法加入集群 path.data: /var/lib/elasticsearch/nodes path.logs: /var/log/elasticsearch # 有内网IP的话能够配置只监听本机127.0.0.1的IP network.host: 0.0.0.0 http.port: 9200 transport.tcp.port: 9300 http.cors.enabled: true http.cors.allow-origin: "*" xpack.security.enabled: false # 注意:地址的话能够配置内网IP地址 discovery.seed_hosts: ["192.168.1.1", "192.168.1.2", "192.168.1.3"] cluster.initial_master_nodes: ["192.168.1.1", "192.168.1.2", "192.168.1.3"]
同理从节点的配置:
cluster.name: my-application # 每一个node的名字须要惟一,两个从节点的名字不能相同 node.name: node-2 node.master: true #容许该节点存储数据(默认开启) node.data: true path.data: /var/lib/elasticsearch/nodes path.logs: /var/log/elasticsearch network.host: 0.0.0.0 http.port: 9200 transport.tcp.port: 9300 xpack.security.enabled: false http.cors.enabled: true http.cors.allow-origin: "*" discovery.seed_hosts: ["192.168.1.1", "192.168.1.2", "192.168.1.3"] cluster.initial_master_nodes: ["192.168.1.1", "192.168.1.2", "192.168.1.3"]
配置完主从节点,须要重启三台elasticsearch,重启命令以下:
systemctl restart elasticsearch.service
重启三台Elasticsearch后,执行curl http://localhost:9200/_cat/master
,若是响应以下,则证实安装成功
注意:须要防火墙放行9200和9300端口,或者关闭防火墙
查看主节点
# 表示的意思是从这三台节点选取node-1为主节点 SHBUDVUAQhi7FauSoI8bMg 192.168.1.1 192.168.1.1 node-1
也可执行命令curl -X GET http://127.0.0.1:9200/_cat/nodes?pretty'
,返回类型以下的数据则安装成功:
查看集群全部节点信息
192.168.1.2 9 97 1 0.00 0.03 0.05 mdi - node-2 192.168.1.3 97 0 0.01 0.07 0.07 mdi - node-3 192.168.1.1 18 97 2 0.05 0.05 0.05 mdi * node-1 # 标星号的为主节点
也能够经过命令curl localhost:9200/_cluster/health?pretty
,查看集群的健康状态:
{ "cluster_name" : "my-application", "status" : "green", "timed_out" : false, "number_of_nodes" : 3, "number_of_data_nodes" : 3, "active_primary_shards" : 5, "active_shards" : 10, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0 }
Elasticsearch中信息不少,同时ES也有不少信息查看命令,能够帮助开发者快速查询Elasticsearch的相关信息。
查看命令帮助信息
$ curl localhost:9200/_cat =^.^= /_cat/allocation /_cat/shards /_cat/shards/{index} /_cat/master /_cat/nodes /_cat/indices /_cat/indices/{index} /_cat/segments /_cat/segments/{index} /_cat/count /_cat/count/{index} /_cat/recovery /_cat/recovery/{index} /_cat/health /_cat/pending_tasks /_cat/aliases /_cat/aliases/{alias} /_cat/thread_pool /_cat/plugins /_cat/fielddata /_cat/fielddata/{fields}
在elasticsearch的高级版本以后,head不在是一个插件,而是一个独立的应用来部署,源码地址在https://github.com/mobz/elasticsearch-head。
注意,使用elasticsearch-head的话要求elasticsearch集群开启外网访问才行,不然没法链接到集群。
如果elasticsearch集群部署到内网使用,没有使用外网IP,则没法使用elasticsearch-head链接集群进行管理
暂未找到解决办法。。。
须要提早安装node,安装命令以下:
git clone git://github.com/mobz/elasticsearch-head.git cd elasticsearch-head npm install (yum install npm) npm run start
安装成功后,打开 http://localhost:9100/,浏览器显示以下的界面,则安装成功:
如上图所示,在Head组件的界面上,能够很方便的查看集群的状态和数据。