Table of Contents
1. Elasticsearch集群部署
1.1 Elasticsearch简介
Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene(TM) 基础上的搜索引擎.当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:
- 分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。
- 实时分析的分布式搜索引擎。
- 可以扩展到上百台服务器,处理PB级别的结构化或非结构化数据。
基础模块
模块 | 说明 |
cluster | 管理集群状态,维护集群层面的配置信息 |
alloction | 封装了分片分配相关的功能和策略 |
discovery | 发现集群中的节点,以及选举主节点 |
gateway | 对收到master广播下来的集群状态数据的持久化存储 |
indices | 管理全局级的索引设置 |
http | 允许通过JSON over HTTP的方式访问ES的API |
transport | 用于集群内节点之间的内部通信 |
engine | 封装了对Lucene的操作及translog的调用 |
Elasticsearch应用场景:
- 信息检索
- 日志分析
- 业务数据分析
- 数据库加速
- 运维指标监控
1.2 Elasticsearch安装与部署
下载地址:https://elasticsearch.cn/download/
清华大学开源软件镜像站:https://mirrors.tuna.tsinghua.edu.cn/elasticstack/yum/elastic-7.x/7.6.0/
官方安装步骤文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
安装软件
rpm -ivh jdk-8u171-linux-x64.rpm
rpm -ivh elasticsearch-7.7.1.rpm //7.6版本以上自带jdk
设置服务自启
systemctl daemon-reload
systemctl enable elasticsearch
修改配置文件
vim /etc/elasticsearch/elasticsearch.yml
修改系统限制:kernel > system > user
vim /etc/security/limits.conf
vim /etc/elasticsearch/jvm.options
Systemd配置【使用Systemd启动】
vim /usr/lib/systemd/system/elasticsearch.service ##在service模块添加
启动
systemctl daemon-reload
systemctl start elasticsearch
测试访问
1.3 elasticsearch插件安装
安装详解:https://github.com/mobz/elasticsearch-head
下载安装
wget https://github.com/mobz/elasticsearch-head/archive/master.zip
unzip master.zip
下载安装nodejs(head插件本质上是一个nodejs的工程)
wget https://mirrors.tuna.tsinghua.edu.cn/nodesource/rpm_9.x/el/7/x86_64/nodejs-9.11.2-1nodesource.x86_64.rpm
rpm -ivh nodejs-9.11.2-1nodesource.x86_64.rpm
node -v
npm -v ##查看版本,确定安装成功
更换npm源安装
cd elasticsearch-head-master/
npm install --registry=https://registry.npm.taobao.org
缺少phantomjs
下载并解压phantomjs
将执行文件复制到bin目录下
执行npm install
npm install --registry=https://registry.npm.taobao.org
修改ES主机ip和端口
vim ~/elasticsearch-head/_site/app.js
启动head插件
npm run start &
image widget
修改ES跨域主持
vim /etc/elasticsearch/elasticsearch.yml
重启ES服务
systemctl restart elasticsearch.service
访问head插件服务
创建索引
查看es状态
1.4 elasticsearch分布式部署
安装两个es节点,并修改配置
node2:
node3:
查看节点状态
1.5 elasticsearch节点角色
Master:
主要负责集群中索引的创建、删除以及数据的Rebalance等操作。Master不负责数据的索引和检索,所以负载较轻。当Master节点失联或者挂掉的时候,ES集群会自动从其他Master节点选举出一个Leader。
Data Node:
主要负责集群中数据的索引和检索,一般压力比较大。
Coordinating Node:
原来的Client node的,主要功能是来分发请求和合并结果的。所有节点默认就是Coordinating node,且不能关闭该属性。
Ingest Node:
专门对索引的文档做预处理
1.6 elasticsearch节点优化
在生产环境下,如果不修改elasticsearch节点的角色信息,在高数据量,高并发的场景下集群容易出现脑裂等问题。
默认情况下,elasticsearch集群中每个节点都有成为主节点的资格,也都存储数据,还可以提供查询服务。
节点角色是由以下属性控制:
node.master: false|true
这个属性表示节点是否具有成为主节点的资格,注意:此属性的值为true,并不意味着这个节点就是主节点。 因为真正的主节点,是由多个具有主节点资格的节点进行选举产生的。
node.data: true|false
这个属性表示节点是否存储数据
node.ingest: true|false
是否对文档进行预处理。
search.remote.connect: true|false
是否禁用跨集群查询
默认情况下这些属性的值都是true。
第一种组合:(默认)
node.master: true
node.data: true
node.ingest: true
search.remote.connect: true
这种组合表示这个节点即有成为主节点的资格,又存储数据。 如果某个节点被选举成为了真正的主节点,那么他还要存储数据,这样对于这个节点的压力就比较大了。 测试环境下这样做没问题,但实际工作中不建议这样设置。
第二种组合:(Data node)
node.master: false
node.data: true
node.ingest: false
search.remote.connect: false
这种组合表示这个节点没有成为主节点的资格,也就不参与选举,只会存储数据。 这个节点称为data(数据)节点。在集群中需要单独设置几个这样的节点负责存储数据。后期提供存储和查询服务。
第三种组合:(master node)
node.master: true
node.data: false
node.ingest: false
search.remote.connect: false
这种组合表示这个节点不会存储数据,有成为主节点的资格,可以参与选举,有可能成为真正的主节点。 这个节点我们称为master节点。
第四种组合:(Coordinating Node)
node.master: false
node.data: false
node.ingest: false
search.remote.connect: false
这种组合表示这个节点即不会成为主节点,也不会存储数据, 这个节点的意义是作为一个协调节点,主要是针对海量请求的时候可以进行负载均衡。
第五种组合:(Ingest Node)
node.master: false
node.data: false
node.ingest: true
search.remote.connect: false
这种组合表示这个节点即不会成为主节点,也不会存储数据, 这个节点的意义是ingest节点,对索引的文档做预处理。
生产集群中可以对这些节点的职责进行划分
建议集群中设置3台以上的节点作为master节点,这些节点只负责成为主节点,维护整个集群的状态。
再根据数据量设置一批data节点,这些节点只负责存储数据,后期提供建立索引和查询索引的服务,这样的话如果用户请求比较频繁,这些节点的压力也会比较大。
所以在集群中建议再设置一批协调节点,这些节点只负责处理用户请求,实现请求转发,负载均衡等功能。
各类节点对资源的需求
master节点:普通服务器即可(CPU、内存 消耗一般)
data节点:主要消耗磁盘、内存。 path.data: data1,data2,data3 这样的配置可能会导致数据写入不均匀,建议只指定一个数据路径,磁盘可以使用raid0阵列,而不需要成本高的ssd。
Coordinating节点:对cpu、memory要求较高。
2. logstash数据采集
2.1 Logstash简介
Logstash是一个开源的服务器端数据处理管道。
logstash拥有200多个插件,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的 “存储库” 中。(大多都是Elasticsearch)
Logstash管道有两个必需的元素,输入和输出,以及一个可选元素过滤器
输入:
采集各种样式、大小和来源的数据 Logstash 支持各种输入选择 ,同时从众多常用来源捕捉事件。 能够以连续的流式传输方式,轻松地从您的日志、指标、Web 应用、数据存储以及各种 AWS 服务采集数据。
过滤器:
实时解析和转换数据 数据从源传输到存储库的过程中,Logstash 过滤器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便更轻松、更快速地分析和实现商业价值。利用 Grok 从非结构化数据中派生出结构从 IP 地址破译出地理坐标将 PII 数据匿名化,完全排除敏感字段简化整体处理,不受数据源、格式或架构的影响
输出:
选择您的存储库,导出您的数据 尽管 Elasticsearch 是我们的首选输出方向,能够为我们的搜索和分析带来无限可能,但它并非唯一选择。 Logstash 提供众多输出选择,您可以将数据发送到您要指定的地方,并且能够灵活地解锁众多下游用例。
2.2 Logstash安装与配置
官方下载地址:https://elasticsearch.cn/download/
推荐下载地址:https://mirrors.tuna.tsinghua.edu.cn/elasticstack/yum/elastic-7.x/7.7.1/
Logstash安装
rpm -ivh jdk-8u221-linux-x64.rpm
rpm -ivh logstash-7.7.1.rpm
软链接
ln -s /usr/share/logstash/bin/logstash /usr/bin/ ##软连接
标准输入到标准输出
logstash -e 'input { stdin { } } output { stdout {}
2.3 file输出插件
标准输入到文件
vim /etc/logstash/conf.d/file.conf
指定配置文件运行
logstash -f /etc/logstash/conf.d/file.conf
在标准输入中键入"hello"后查看
cat /tmp/logstash.txt
2.4 elasticsearch输出插件
标准输入到es主机
vim /etc/logstash/conf.d/es.conf
###
input {
stdin { }
}
output {
elasticsearch {
# 输出到ES主机与端口
hosts => "192.168.1.11:9200"
# 定制索引名称
index => "logstash-%{+YYYY.MM.dd}"
}
}
###
指定配置文件运行
logstash -f /etc/logstash/conf.d/es.conf
查看ES状态
2.5 file输入插件
vim /etc/logstash/conf.d/es.conf
logstash -f /etc/logstash/conf.d/es.conf
查看ES
logstash如何区分设备、文件名、文件的不同版本
- logstash会把进度保存到sincedb文件中
find / -name .sincedb*
cat /usr/share/logstash/data/plugins/inputs/file/.sincedb_15940cad53dd1d99808eeaecd6f6ad3f
ls -i /var/log/httpd/access_log
sincedb文件内容解释
6个字段:
- inode编号
- 文件系统的主要设备号
- 文件系统的次要设备号
- 文件中的当前字节偏移量
- 最后一个活动时间戳(浮点数)
- 与此记录匹配的最后一个已知路径
2.6 syslog插入插件
logstash可以伪装成日志服务器,直接接受远程日志
vim /etc/logstash/conf.d/syslog.conf
指定配置文件运行
logstash -f /etc/logstash/conf.d/syslog.conf
netstat -antulp |grep :514
配置客户端传入日志
vim /etc/rsyslog.conf # logstash安装在node4 192.168.1.14
systemctl restart rsyslog
查看logstash输出
2.7 多行过滤插件
多行过滤把多行日志记录合并为一行事件
vim /etc/logstash/conf.d/multiline.conf
###
input {
stdin {
codec => multiline {
pattern => "^EOF" ##以EOF为结束
negate => true
what => previous
}
}
}
output {
stdout {}
}
###
指定配置文件运行
logstash -f /etc/logstash/conf.d/multiline.conf
查看输出
2.8 grok过滤插件
grok过滤
vim /etc/logstash/conf.d/grok.conf
###
input {
stdin {}
}
filter {
grok {
match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}"}
}
}
output {
stdout {}
}
###
指定配置文件运行
logstash -f /etc/logstash/conf.d/grok.conf
查看输出
- apache服务日志过滤实战
vim /etc/logstash/conf.d/apache.conf
###
input {
file {
path => "/var/log/httpd/access_log"
start_position => "beginning"
}
}
filter{
grok {
match => { "message" => "%{HTTPD_COMBINEDLOG}" }
}
}
output {
elasticsearch {
hosts => "192.168.1.11:9200"
index => "apachelog-%{+YYYY.MM.dd}"
}
}
###
curl 127.0.0.1 ##本地访问两次,生成点日志
指定配置文件运行
logstash -f /etc/logstash/conf.d/apache.conf
查看输出
- curl访问
可以看到两条访问记录,且是本机通过curl访问
- 浏览器访问
3. kibana可视化
3.1 kibana简介
Kibana 核心产品搭载了一批经典功能:柱状图、线状图、饼图、旭日图等~
将地理数据融入任何地图
精选的时序性 UI,对Elasticsearch 中的数据执行高级时间序列分析
利用 Graph 功能分析数据间的关系
Kibana 开发工具为开发人员提供了多种强大方法来帮助其与 Elastic Stack 进行交互
3.2 kibana安装与配置
kibana下载
https://elasticsearch.cn/download/
https://mirrors.tuna.tsinghua.edu.cn/elasticstack/yum/elastic-7.x/7.7.1/
kibana安装
rpm -ivh kibana-7.7.1-x86_64.rpm
kibana配置
vim /etc/kibana/kibana.yml
启动kibana服务
systemctl enable --now kibana.service
访问kibana
3.3 kibana使用
创建索引匹配
基于ES索引创建可视化
访问量可视化
创建柱状图(访问量排行榜)(客户端ip为x轴)
创建仪表盘(dashboard)
3.4 启用xpack安全验证
集群模式需要先创建证书
cd /usr/share/elasticsearch/
./bin/elasticsearch-certutil ca
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
cp elastic-certificates.p12 elastic-stack-ca.p12 /etc/elasticsearch
cd /etc/elasticsearch
chown elasticsearch elastic-certificates.p12 elastic-stack-ca.p12
配置所有的elasticsearch集群节点
vim /etc/elasticsearch/elasticsearch.yml
###
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/elastic-certificates.p12
###
ES集群重启正常后,设置用户密码
设置kibana连接ES的用户密码
vim /etc/kibana/kibana.yml
设置Logstash连接ES用户密码
vim /etc/logstash/conf.d/apache.conf
logstash -f /etc/logstash/conf.d/apache.conf
head访问
- 添加参数到es配置
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
- 浏览器访问http://192.168.1.101:9100/?auth_user=elastic&auth_password=redhat
- 利用ab压力测试工具测试访问
ab -c 2 -n 1000 http://192.168.1.14/
- 查看
- node3访问
- 刷新