简介
在部署集群时,日志文件通常会散落分布在各个节点上,这对于集群的日常管理,故障排查等显然造成了障碍,因此我们需要有一种系统能够将集群中服务器的日志进行集中管理
,ELK即实现了这样的功能,它的整体组成部分如下:
Elasticsearch
它是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能Logstash
是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和ElasticsearchKibana
是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据
一、部署elasticsearch
下载安装:
rpm -ivh elasticsearch-7.6.1.rpm %7.6版本自带jdk,如果下载其它版本需要先安装jdk
修改配置文件:
vim /etc/elasticsearch/elasticsearch.yml
cluster.name: my-es %集群名称
node.name: server1 %主机名需要解析
path.data: /var/lib/elasticsearch %数据目录
path.logs: /var/log/elasticsearch %日志目录
bootstrap.memory_lock: true %锁定内存分配(默认锁定1G内存,即保证该程序有1G的运行内存,因此主机内存越大越好)
network.host: 172.25.0.1 %主机ip
http.port: 9200 %http服务端口
discovery.seed_hosts: [“server1“,……] %指定集群中的主节点
cluster.initial_master_nodes: [“server1“,…..] %指定集群引导时的初始主节点
修改系统限制:
vim /etc/security/limits.conf
elasticsearch soft memlock unlimited %表示系统对memlock没有限制,让系统自己锁定
elasticsearch hard memlock unlimited
elasticsearch - nofile 65536 %最大内存
elasticsearch - nproc 4096 %开启的线程数
修改systemd启动文件:
vim /usr/lib/systemd/system/elasticsearch.service
[Service] %在service语句块下添加
LimitMEMLOCK=infinity
systemctl daemon-reload
systemctl start elasticsearch
再开启两个节点,创建集群:
server2和server3上做同样的配置,只需将/etc/elasticsearch/elasticsearch.yml中的域名和ip修改为自己对应的即可,能访问到下述页面表示部署成功
二、添加可视化界面
我们为elasticsearch添加elasticsearch-head插件来为其创建可视化界面
只需在server1上部署:
1、更换npm源安装(使用国内的镜像源)
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm -v
2、下载elasticsearch-head插件
unzip elasticsearch-head-master.zip
[root@server1 7.6]# cd elasticsearch-head-master/
[root@server1 elasticsearch-head-master]# yum install -y bzip2
[root@server1 elasticsearch-head-master]# cnpm install
✔ Installed 10 packages
✔ Linked 0 latest versions
✔ Run 0 scripts
✔ All packages installed (used 19ms(network 16ms), speed 0B/s, json 0(0B), tarball 0B)
3、安装nodejs
rpm -ivh nodejs-9.11.2-1nodesource.x86_64.rpm
4、修改ES主机ip
[root@server1 elasticsearch-head-master]# cd _site/
[root@server1 _site]# vim app.js %/9200过滤,然后将ip改为本机ip172.25.0.1
[root@server1 _site]# cd ..
[root@server1 elasticsearch-head-master]# pwd
/root/7.6/elasticsearch-head-master
[root@server1 elasticsearch-head-master]# cnpm run start & %启动head插件
[1] 3740
[root@server1 elasticsearch-head-master]#
> elasticsearch-head@0.0.0 start /root/7.6/elasticsearch-head-master
> grunt server
(node:3766) ExperimentalWarning: The http2 module is an experimental API.
Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100
[root@server1 ~]# cd /etc/elasticsearch/
[root@server1 elasticsearch]# ls
elasticsearch.keystore jvm.options role_mapping.yml users
elasticsearch.yml log4j2.properties roles.yml users_roles
[root@server1 elasticsearch]# vim elasticsearch.yml %修改ES跨域支持
http.cors.enabled: true % 是否支持跨域
http.cors.allow-origin: "*" % *表示支持所有域名
[root@server1 elasticsearch]# systemctl restart elasticsearch.service %重启ES服务
添加索引,查看ES状态
灰色表示没有副本
黄色代表没有主分片丢失
重启server2上的es服务,分片即可恢复
三、elasticsearch节点角色
Master:
主要负责集群中索引的创建、删除以及数据的Rebalance等操作。Master不负责数据的索引和检索,所以负载较轻。当Master节点失联或者挂掉的时候,ES集群会自动从其他Master节点选举出一个Leader。Data Node:
主要负责集群中数据的索引和检索,一般压力比较大。Coordinating Node:
原来的Client node的,主要功能是来分发请求和合并结果的。所有节点默认就是Coordinating node,且不能关闭该属性。Ingest Node:
专门对索引的文档做预处理
- 在生产环境下,如果不修改elasticsearch节点的角色信息,在高数据量,高并发的场景下集群容易出现脑裂等问题。
- 默认情况下,elasticsearch集群中每个节点都有成为主节点的资格,也都存储数据,还可以提供查询服务。
- 节点角色是由以下属性控制:
node.master
: false|true 这个属性表示节点是否具有成为主节点的资格 注意:此属性的值为true,并不意味着这个节点就是主节点。 因为真正的主节点,是由多个具有主节点资格的节点进行选举产生的。node.data
: true|false 这个属性表示节点是否存储数据。node.ingest
: true|false 是否对文档进行预处理。search.remote.connect
: true|false 是否禁用跨集群查询
默认情况下这些属性的值都是true。
示例:
vim elasticsearch.yml
systemctl restart elasticsearch.service
注意:因为之前我们在server1上存有数据,因此在做上述更改前需要先使用指定命令来对数据清除,否则无法启动服务
四、logstash部署
参考链接: https://www.elastic.co/guide/en/logstash/7.6/plugins-outputs-elasticsearch.html.
- Logstash是一个开源的服务器端数据处理管道。
- logstash拥有200多个插件,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的 “存储库” 中。(大多都是 Elasticsearch。)
- Logstash管道有两个必需的元素,输入和输出,以及一个可选元素过滤器。
输入:
采集各种样式、大小和来源的数据- Logstash 支持各种输入选择 ,同时从众多常用来源捕捉事件。
- 能够以连续的流式传输方式,轻松地从您的日志、指标、Web 应用、数据存储以及各种 AWS 服务采集数据。
输出:
选择您的存储库,导出您的数据- 尽管 Elasticsearch 是我们的首选输出方向,能够为我们的搜索和分析带来无限可能,但它并非唯一选择。
- Logstash 提供众多输出选择,您可以将数据发送到您要指定的地方,并且能够灵活地解锁众多下游用例。
yum search openjdk
yum install -y java-11-openjdk.x86_64 %安装jdk
rpm -ivh logstash-7.6.1.rpm %安装logstash
cd /etc/elasticsearch/
vim elasticsearch.yml %禁用内存锁
systemctl restart elasticsearch.service %重启服务
/usr/share/logstash/bin/logstash -e 'input { stdin { } } output { stdout {} }' %标准输入到标准输出
标准输入到文件:
cd /etc/logstash/conf.d/
vim demo.conf
input {
stdin { }
}
output {
file {
path => "/tmp/demo" %输出的文件路径
codec => line { format => "custom format: %{message}"} %定制数据格式
}
}
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/demo.conf %指定配置文件运行
cd /tmp/
cat demo %查看输出
标准输入到es主机:
cd -
vim demo.conf
input {
file {
path => "/var/log/messages" %输入的文件路径
start_position => "beginning" %起始位置
}
}
output {
elasticsearch {
hosts => "172.25.0.1:9200" %输出到的ES主机与端口
index => "syslog-%{+YYYY.MM.dd}" %定制索引名称
}
}
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/demo.conf %指定配置文件运行