一、组成
ELK由Elasticsearch、Logstash和Kibana三部分组件组成。
Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash是一个完全开源的工具,它可以对你的日志进行收集、分析,并将其存储供以后使用
kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
二、下载方式
下载地址:https://www.elastic.co/downloads。
右键复制链接地址,wget就可以下载,如:wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.3.tar.gz
下载完,解压,如: tar -zxvf elasticsearch-6.4.3.tar.gz
还需要安装jdk, sudo apt-get update, sudo apt-get install openjdk-8-jdk
三、配置
(1)elasticsearch配置启动:
进入config目录,vim elasticsearch.yml 修改配置文件,在最下面加入如下几行:
network.host: 0.0.0.0 http.port: 9200 http.cors.enabled: true http.cors.allow-origin: "*"
进入bin目录下,./elasticsearch 启动
可能出现错误:
1.max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决:
切换到root用户执行命令:
sysctl -w vm.max_map_count=262144
查看结果:
sysctl -a|grep vm.max_map_count
显示:
vm.max_map_count = 262144
上述方法修改之后,如果重启虚拟机将失效,所以:
在 /etc/sysctl.conf文件最后添加一行
vm.max_map_count=262144
即可永久修改。
2.the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured
修改 config/elasticsearch.yml
取消注释保留一个节点:cluster.initial_master_nodes: ["主机名或ip"]
从Elasticsearch 7.0开始,如果一个节点无法发现主节点,而且也无法赢得选举,Elasticsearch将会定期记录警告消息,消息中将提供描述其当前状态的详细信息,帮助诊断一些常见的问题。
如果未设置initial_master_nodes,那么在启动新节点时会尝试发现已有的集群。如果节点找不到可以加入的集群,将定期记录警告消息:
master not discovered yet, this node has not previously joined a bootstrapped (v7+) cluster,and [cluster.initial_master_nodes] is empty on this node
(2)配置kibana:
需要在kibana.yml文件中指定一下需要读取的elasticSearch地址和可供外网访问的bind地址就可以了
vim kibana.yml
elasticsearch.hosts: ["http://localhost:9200"] server.host: 0.0.0.0 server.port: 5601
通过提示,无任何错误表示启动完成。此时通过访问http://192.168.1.23:5601即可
可能出现问题:
1.Error: Request Timeout after 30000ms
解决:处理方法加大es jvm内存和优化查询
给elasticsearch多一点内存,配置文件/config/jvm.options
更改kibana.yml中 elasticsearch.requestTimeout: 90000
(3)安装filebeat
为什么要用filebeat来收集日志?为什么不直接用logstash收集日志?
因为logstash是jvm跑的,资源消耗比较大,启动一个logstash就需要消耗500M左右的内存(这就是为什么logstash启动特别慢的原因),而filebeat只需要10来M内存资源。常用的ELK日志采集方案中,大部分的做法就是将所有节点的日志内容通过filebeat发送到logstash,logstash根据配置文件进行过滤。然后将过滤之后的文件输送到elasticsearch中,通过kibana去展示。
下载地址:https://www.elastic.co/cn/downloads/beats/filebeat
配置文件默认是filebeat.yml
#global filebeat configuration options tags: ["10.0.3.199"] max-procs: 1 #Configure inputs filebeat.inputs: - type: log paths: => 日志路径,支持正则 - /var/log/httpd/*log fields: => 输出日志中添加额外的字段,用于日志过滤 service: httpd_log => httpd_log 为自定义字段, logstash的输出可以看到 fields_under_root: true => 自定义字段在第一行,不会被覆盖 #Configure the output output.logstash: => 这里输出到logstash hosts: ["10.0.3.60:5044"] => logstash主机 IP + Port compression_level: 0 => 0表示不进行压缩,压缩级别有0-9
附:
elasticsearch主从配置
主机配置:
1 # 集群名称
2 cluster.name: es
3 # 节点名称
4 node.name: es-master
5 # 存放数据目录,先创建该目录
6 path.data: /home/app/elk/elasticsearch-7.3.2/data
7 # 存放日志目录,先创建该目录
8 path.logs: /home/app/elk/elasticsearch-7.3.2/logs
9 # 节点IP
10 network.host: 192.168.43.16
11 # tcp端口
12 transport.tcp.port: 9300
13 # http端口
14 http.port: 9200
15 # 种子节点列表,主节点的IP地址必须在seed_hosts中
16 discovery.seed_hosts: ["192.168.43.16:9300","192.168.43.17:9300","192.168.43.18:9300"]
17 # 主合格节点列表,若有多个主节点,则主节点进行对应的配置
18 cluster.initial_master_nodes: ["192.168.43.16:9300"]
19 # 主节点相关配置
20
21 # 是否允许作为主节点
22 node.master: true
23 # 是否保存数据
24 node.data: true
25 node.ingest: false
26 node.ml: false
27 cluster.remote.connect: false
28
29 # 跨域
30 http.cors.enabled: true
31 http.cors.allow-origin: "*"
从机配置:
1 # 集群名称
2 cluster.name: es
3 # 节点名称
4 node.name: es-data1
5 # 存放数据目录,先创建该目录
6 path.data: /home/app/elk/elasticsearch-7.3.2/data
7 # 存放日志目录,先创建该目录
8 path.logs: /home/app/elk/elasticsearch-7.3.2/logs
9 # 节点IP
10 network.host: 192.168.43.17
11 # tcp端口
12 transport.tcp.port: 9300
13 # http端口
14 http.port: 9200
15 # 种子节点列表,主节点的IP地址必须在seed_hosts中
16 discovery.seed_hosts: ["192.168.43.16:9300","192.168.43.17:9300","192.168.43.18:9300"]
17 # 主合格节点列表,若有多个主节点,则主节点进行对应的配置
18 cluster.initial_master_nodes: ["192.168.43.16:9300"]
19 # 主节点相关配置
20
21 # 是否允许作为主节点
22 node.master: false
23 # 是否保存数据
24 node.data: true
25 node.ingest: false
26 node.ml: false
27 cluster.remote.connect: false
28
29 # 跨域
30 http.cors.enabled: true
31 http.cors.allow-origin: "*"