1. 场景定位
1.1 生命周期
任何一个产品从无到有,都至少要经历如下几个阶段:调研阶段、设计阶段、开发阶段、测试阶段、运营阶段
1.2 发展现状
随着公司业务的发展,我们所提供的产品规模越来越大,功能越来越多、架构越来越复杂。而到了这个时候,我们往往对产品的交付质量和项目的持续稳定运行的要求越来越高,虽然我们通过各种开发框架、开发模型、持续交付、DevOps等等,各种方法和手段来提高我们产品的质量,而且可以在一定程度上满足我们的需求。但是我们知道,对于任何一种产品来说,把它制造出来的时间和它运行的时间,这两者相差太多了。可以这么说,一个产品的效益完全是由后续持续运行的过程中产生的价值来决定的。所以就需要我们有专业的人员对产品的运营阶段进行高质量的运营维护,从而保证产品在后续阶段持续稳定的盈利下去。
简单来说,高质量的维护就是需要我们时刻的掌握到产品的运行过程中所产生的数据,这些数据包括硬件设备、系统性能、软件运行、趋势数据等等,根据我们对产品业务的熟悉程度,设定一定的指标,当出现某些指标异常的时候,我们就采取一定的手段进行处理,从而保证产品项目软件的持续运营下去。而这个动作就是我们平常所说的"数据采集与处理"。
1.3 数据流程
要完成一次完整的数据采集与处理至少需要有以下几方面来组成:
① 数据采集:根据业务的特性,采取多种方式,进行对一些针对性的数据进行采集
② 数据整理:对上报后的数据源进行收集、清洗、整理
③ 实时分析:对某些重要的核心的业务数据,进行实时分析
④ 离线分析:对普通的数据、非紧急的业务数据进行存储,后续进行相应的分析
⑤ 结果输出:将实时分析和离线分析后的数据结果展现出来,供决策参考
⑥ 问题决策:根据当前业务情况,人工或者自动方式对输出的结构进行分析,并判定下一步的行动(警告或修复),
同时将其决策记录保存下来,以便为后序决策提供依据
也就是说:采集、传输、存储、分析、警告这几部分是非常必要的。
在这个流程图中涉及到两种场景:实时分析与离线分析,如果需要使用市面上的开源解决方案来实现的话,有两套方案比较有优势:
方案一:ELK + Kafka + 分布式存储
中数据量场景下,实时的数据多一些
方案二:Spark + Flume + Kafka + Hadoop(Hive + HBase)
大数据量场景下,离线的数据多一些
2. 简介
2.1 定义
两三年前ELK还是一套日志分析平台的解决方案,它是由Elastic公司开发,管理和维护的三款开源产品Elasticsearch,Logstash和Kibana的首字母缩写,随着该套解决方案的软件生态逐渐壮大,其组件和功能也渐渐多了起来,尤其是Beats组件的引入,逐渐形成了这个系列的四大支柱,然后公司将这套解决方案重新命名为:Elastic Stack,最新版本7.X。
官方介绍
The products in the Elastic Stack are designed to be used together and releases are
synchronized to simplify the installation and upgrade process. The full stack consists
of:
Beats 7.5 APM Server 7.5 Elasticsearch Hadoop 7.5
Kibana 7.5 Elasticsearch 7.5 Logstash 7.5
开发语言:
java:Elasticsearch、Logstash、Kibana
go:FileBeats
发展势头
其他信息
2.1 功能特点
ELK Stack之所以受欢迎,是因为它满足了日志管理和分析领域的需求。监控现代应用程序及其所部署的IT基础设施需要一个日志管理和分析解决方案,该解决方案使工程师能够克服监视高度分布式,动态和纷乱繁杂业务环境的挑战。
ELK Stack通过为用户提供一个强大的平台来提供帮助,该平台可以收集和处理来自多个数据源的数据,将数据存储在一个可随数据增长而扩展的集中式数据存储中,并提供了一组分析数据的工具。
当然,ELK Stack是开源的。随着IT组织青睐开源产品,仅此一项就可以解释ELK Stack的普及。使用开源意味着组织可以更轻松地避免受到供应商约束和招募新人才。开源还意味着一个充满活力的社区,它将不断推动新功能和创新,并在需要时提供帮助。
日志种类
物理层:文件、设备等
代理层:nginx、haproxy等
web层:nginx、apache、tomcat等
数据库层:mysql、mongodb、redis等
存储层:ceph、k8s、docker等
...
3. 架构详解
3.1 组件功能
- Beats是安装在边缘主机上的轻型代理,可收集不同类型的数据以转发到堆栈中
- Logstash是一个日志聚合器,可从各种输入源收集数据,执行不同的转换和增强功能,然后将数据发送到各种受支持的输出目标
- Elasticsearch是基于Apache Lucene搜索引擎的开源全文搜索和分析引擎
- Kibana是在Elasticsearch之上工作的可视化层,为用户提供了分析和可视化数据的能力
这四个组件在官方的介绍主要分成了两组势力:数据收集和展示
- 数据收集和处理:Beats和Logstash负责数据收集和处理
- 数据搜索和展示:Elasticsearch索引并存储数据,Kibana提供了用于查询数据和可视化数据的用户界面
这些组件在设计的时候,组件间的交流就非常简单,所以只需要简单的几条配置,就可以将不同的组件组合起来实现一个简单而强大的解决方案。而且还可以基于应用场景的不同随意组合,比如日志管理、日志分析、应用监控、故障排除和保护IT环境等
3.2 解决方案
对于小型的应用项目开发环境,ELK的四个组件可以实现一个非常经典的组合:
对于中大型场景,ELK基于丰富灵活的信息接口将非常多的功能整合到经典组合中,以提高其架构弹性和安全性:
当然了,这里的架构图仅仅是一个简图,而完整的生产级架构将由多个Elasticsearch节点,也许多个Logstash实例,一个归档机制,一个警报插件以及跨数据中心区域或部分的完整复制组成,以实现高可用性
主要使用中小场景下,经典架构的环境架构。
总结
- ELK场景定位
- 生命周期:调研阶段 - 设计阶段 - 开发阶段 - 测试阶段 - 运营阶段
- 数据流程:数据采集 - 数据整理 - 实时分析(数据存储 - 离线分析) - 结果输出 - 决策 - 警告/修复
- 中数据量环境:ELK
- 软件简介
- ES是一整套日志处理方案,主要有6个组件以及其他功能插件组成
- 四大核心组件
- 数据搜索和展示:Elasticsearch、Kibana
- 数据收集和传输:Logstash、Beats
- 流行原因
- 日志监控是所有应用环境的硬性要求
- ELK解决方案简单灵活、功能强大
- ELK是一套开源方案,性价比远远高于其他巨型功能软件(Splunk)
- 架构详解
- 组件功能
- 数据收集与处理:Beats、Logstash
- 数据搜索与展示:Elasticsearch、Kibana
- 组件特点:配置简单、通信数据灵活、随意组合
- 常见方案
- 经典组合:Beats + Logstash + Elasticsearch + Kibana
- 扩展组合:Beats + Redis|kafka|RabbitMQ + Logstash + Elasticsearch + Nginx + Kibana
- 组件功能
4. 基础系统环境
① 时间同步
时区配置:
timedatectl set-timezone Asia/Shanghai
或
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
时间同步配置:
apt-get install ntpdate -y
ntpdate time1.aliyun.com
同步效果检查:
date
hwclock --systohc
自动时间同步:
crontab -e
# time update by itcast
*/5 * * * * /usr/sbin/ntpdate time1.aliyun.com >> /dev/null 2>&1 &
② 秘钥文件配置
生成秘钥:
# 192.168.203.151主机上执行
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.203.152
# 192.168.203.152主机上执行
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.203.151
③ 主机名解析
同时编辑在192.168.203.163
和192.168.203.164
的hosts文件内容:
# vi /etc/hosts
192.168.203.151 master.itcast.com master
192.168.203.152 node.itcast.com node
注:以上操作在集群的每台主机上都要进行操作,以2台机器进行操作
java环境
虽然elasticsearch软件内部已经集成了java软件,但是其他的组件没有办法共享elasticsearch内部的java,尤其是logstash仍然会使用到java软件,所以提前将java环境部署起来。
创建目录:
mkdir /data/{softs,server} -p
cd /data/softs
下载java或者上传java安装包:
# /data/softs目录中
wget https://download.java.net/openjdk/jdk11/ri/openjdk-11+28_linux-x64_bin.tar.gz
ls /data/softs
安装java:
tar -xf openjdk-11+28_linux-x64_bin.tar.gz -C /data/server
cd /data/server/
# 删除原先部署的用于jenkins的java(如果有的话)
rm -f java
ln -s jdk-11 java
配置java环境变量:
# vi /etc/profile.d/java.sh
# java env set
export JAVA_HOME=/data/server/java
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
终端种使用source执行脚本
source /etc/profile.d/java.sh
chmod +x /etc/profile.d/java.sh
检查效果:
java -version
5. elasticsearch部署
主部署在192.168.203.151
中;从部署在192.168.203.152
中;
1、 专属账号
elasticsearch软件为了避免权限过于强大,默认情况下已经禁止root用户来启动elasticsearch了,所以需要定制一个专门为ELK环境的账号:elastic
创建账号:
useradd -m elastic
echo elastic:12345 | chpasswd
设置elastic账号免密sudo:
echo "elastic ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/elastic
chmod 0440 /etc/sudoers.d/elastic
2 、软件部署
2.1、获取软件
定制软件目录:
cd /data/softs/
# 此处wget命令是从网上下载比较慢,使用安装包放入/data/softs目录中
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.2-linux-x86_64.tar. gz
mkdir /data/server/ -p
tar -xf elasticsearch-7.3.2-linux-x86_64.tar.gz -C /data/server/
cd /data/server/
ln -s elasticsearch-7.3.2/ elasticsearch
环境变量设置:
# vi /etc/profile.d/elastic.sh
# elastic env set
export ELASTIC_HOME=/data/server/elasticsearch
export PATH=$ELASTIC_HOME/bin:$PATH
终端使用source执行脚本
source /etc/profile.d/elastic.sh
chmod +x /etc/profile.d/elastic.sh
2.2、定制启动属性
配置elasticsearch软件的启动参数:
具体操作:
- 1、打开es配置文件:
vi elasticsearch/config/elasticsearch.yml
- 2、把如下配置写入es配置文件
# vi elasticsearch/config/elasticsearch.yml
# 设定elasticsearch集群的名称
cluster.name: elastic.itcast.com
# 设定集群master界面的名称
node.name: master.itcast.com
node.master: true
node.data: true
# 设定elasticsearch的存储目录,包括数据目录和日志目录
path.data: /data/server/elasticsearch/data
path.logs: /data/server/elasticsearch/logs
# 允许所有主机都能访问我们的 elasticsearch
network.host: 192.168.203.151
# 设置elasticsearch对外的访问端口
http.port: 9200
# 设定主机发现
discovery.seed_hosts: ["master.itcast.com","node.itcast.com"]
cluster.initial_master_nodes: ["master.itcast.com"]
# 开启跨域访问支持,默认为false
http.cors.enabled: true
# 跨域访问允许的域名地址,(允许所有域名)以上使用正则
http.cors.allow-origin: "*"
注:
① 主机名解析的记录一定要做好
② node节点的区别主要在于以下属性:
node.name: node.itcast.com node.master: false network.host: 192.168.203.152
2.3、配置依赖
elasticsearch启动的时候,默认虚拟内存大小为262144,需要提前设置虚拟内存大小为262144
echo 'vm.max_map_count=262144' > /etc/sysctl.d/elastic.conf
sysctl -p /etc/sysctl.d/elastic.conf
elasticsearch启动的时候,对文件描述符有限制,所以需要设置elastic文件描述符限制数量为65536
echo 'elastic - nofile 65536' > /etc/security/limits.d/elastic.conf
elasticsearch的配置文件中存在数据目录和日志目录,需要提前创建
mkdir /data/server/elasticsearch/{data,logs} -p
因为要基于elastic用户来启动软件,所以需要提前设置相关属性
chown -R elastic:elastic /data/server/elasticsearch
chown -R elastic:elastic /data/server/elasticsearch-7.3.2/
2.4、检查效果
切换到专用账号
su elastic
启动应用
elasticsearch -d
注意:默认是以前台方式来运行:-d是以后台方式来运行
使用其他用户检查效果
netstat -tnulp
结果显示:默认elasticsearch开启了两个端口:9200是elasticsearch对外提供服务的接口,9300是集群节点间的通信端口,先启动 9300,然后再开启9200
浏览器测试效果
curl 192.168.203.151:9200
6. 应用
es搜索引擎的基本操作
检查集群状态
curl 192.168.203.151:9200/_cat/health
curl 192.168.203.151:9200/_cat/health?v
注:在所有的地址后面,增加 ? 和 ?v,会逐渐显示更多的详细内容
查看结点
curl 192.168.203.151:9200/_cat/nodes
查看索引
curl 192.168.203.151:9200/_cat/indices
创建索引
# 创建索引
curl -XPUT 192.168.203.151:9200/index_test
# 查看索引
curl 192.168.203.151:9200/_cat/indices
# 格式化显示
curl 192.168.203.151:9200/index_test?pretty
删除索引
# 删除索引
curl -XDELETE 192.168.203.151:9200/index_test
# {"acknowledged":true}
# 查看索引
curl 192.168.203.151:9200/_cat/indices
配置切片属性
curl -X PUT 192.168.203.151:9200/index_test -H 'Content-Type:application/json' -d '{"settings": {"number_of_shards": 3,"number_of_replicas": 1}}'
检查效果
curl 192.168.203.151:9200/_cat/indices
curl 192.168.203.151:9200/index_test?pretty
7. Logstash部署
部署在192.168.203.151
中;
1、功能定位
logstash就是借助于大量的功能插件,实现从数据源获取数据,然后将数据传输到elasticsearch
在图中可以明显看到,logstash组件至少包含两个插件:input和output,这两个主要用于信息的接入和输 出。
注:logstash软件本身无序安装,它仅仅是一个软件运行命令程序,但是该软件的运行依赖于java环境
2、获取软件
文件夹存在不用再创建了,直接用;
cd /data/softs/
# 此处的wget是网上下载比较慢,大家把我给的logstash-7.3.2.tar.gz安装包放入/data/softs目录就好
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.3.2.tar.gz
tar -xf logstash-7.3.2.tar.gz -C /data/server/
cd /data/server/
ln -s logstash-7.3.2/ logstash
环境变量设置:
# vi /etc/profile.d/logstash.sh
# logstash env set
export LOGSTASH_HOME=/data/server/logstash
export PATH=$LOGSTASH_HOME/bin:$PATH
使用source执行脚本
source /etc/profile.d/logstash.sh
chmod +x /etc/profile.d/logstash.sh
测试效果
命令格式:
input {
stdin {}
}
output {
stdout {}
}
格式解析:
- input {} 用于接受信息的输入,output {} 用于对内部的数据输出
- stdin {} 表示屏幕上的标准输入,stdout {} 表示屏幕的标准输出
效果演示:
logstash -e 'input { stdin { } } output { stdout {} }'
看到上面准备好的信息后,接下来在屏幕上随便输入一段信息,信息输入完毕后,他会自动格式化的输出一些内容:
注:信息展示出来的内容,其实包含两部分:index(搜索数据时候的索引)和value(具体的数据内容)
收集数据后传输到elasticsearch:
logstash -e 'input { stdin{} } output { elasticsearch { hosts => ["master.itcast.com:9200"] index => "message" } }'
看到上面准备好的信息后,接下来在屏幕上随便输入一段信息:
注:因为我们将信息输入到es中了,所以这里看不到信息输入
到elasticsearch上基于"_cat/indices"获取所有索引:
curl 192.168.203.151:9200/_cat/indices
查看具体数据:
curl 192.168.203.151:9200/message?pretty
当以文件的方式来启动的时候,端口情况:
netstat -tnulp | grep 9600
8. Kibana部署
注:kibana单独部署,不要与logstash和elasticsearch部署在一起,因为都会用到java,随时都有可能卡死的状况
部署在192.168.203.152
中;
1、专属账号
kibana软件为了避免权限过于强大,默认情况下已经禁止root用户来启动kibana了,所以需要定制一 个专门为ELK环境的账号:kibana
创建账号:
useradd -m kibana
echo kibana:12345 | chpasswd
设置kibana账号免密sudo:
echo "kibana ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/kibana
chmod 0440 /etc/sudoers.d/kibana
2、获取软件
从官网上下载最新的软件:
cd /data/softs/
# 此处wget是从网上下载
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.3.2-linux-x86_64.tar.gz
mkdir /data/server/ -p
tar -xf kibana-7.3.2-linux-x86_64.tar.gz -C /data/server/
cd /data/server/
ln -s kibana-7.3.2-linux-x86_64/ kibana
环境变量设置:
# vi /etc/profile.d/kibana.sh
# kibana env set
export KIBANA_HOME=/data/server/kibana
export PATH=$KIBANA_HOME/bin:$PATH
使用source执行脚本
source /etc/profile.d/kibana.sh
chmod +x /etc/profile.d/kibana.sh
3、定制启动属性
修改配置文件:
# vi kibana/config/kibana.yml
# 设定 kibana 对外开放的通信端口
server.port: 5601
# 设定可以访问 kibana 的主机地址
server.host: "0.0.0.0"
# 设定 elasticsearch 的主机地址
elasticsearch.hosts: ["http://master.itcast.com:9200"]
# 设定 kibana 的数据索引
kibana.index: ".kibana"
# 设定中文显示格式
i18n.locale: "zh-CN"
4、启动服务
因为kibana默认需要使用普通用户来访问,所以需要采用普通用户启动:
chown -R kibana.kibana /data/server/kibana
chown -R kibana.kibana /data/server/kibana-7.3.2-linux-x86_64
启动服务:
su kibana
# 终端运行
kibana
# 后台运行
nohup kibana >>/dev/null 2>&1 &
注:Kibana should not be run as root. Use --allow-root to continue.
5、检查效果
服务效果
检查端口效果:
netstat -tnulp | grep 5601
结果显示:kibana的默认端口是5601
页面效果:
浏览器查看效果:http://<kibana所在主机ip>:5601
kibana默认帮提供了非常多的示例数据,可以直接点击"使用我的样例数据",接着就会进入到kibana的首页,查看效果:
在"样例数据"部分有三个样本数据,比如选择中间的,点击"添加数据"查看效果:
点击"查看效果",里面有三种模式,我们可以选择"仪表盘",查看效果:
知道kibana是从elasticsearch中获取数据的,检查elasticsearch内部的索引效果:
curl 192.168.203.151:9200/_cat/indices
注:kibana_sample_data_ecommerce这个是数据样本,其他两个是启动kibana的时候自动创建的
9. Fliebeat部署
部署在192.168.203.151
中;
1、软件部署
获取软件:
此处文件夹存在则不用创建!
cd /data/softs/
# 此处curl是从网上下载安装包比较版,filebeat-7.3.2-linux-x86_64.tar.gz拷贝到/data/softs目录即可
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.2-linux-x86_64.tar.gz
tar -xf filebeat-7.3.2-linux-x86_64.tar.gz -C /data/server/
cd /data/server/
ln -s filebeat-7.3.2-linux-x86_64/ filebeat
环境变量设置:
# vi /etc/profile.d/filebeat.sh
# filebeat env set
export FILEBEAT_HOME=/data/server/filebeat/
export PATH=$FILEBEAT_HOME:$PATH
执行脚本
source /etc/profile.d/filebeat.sh
chmod +x /etc/profile.d/filebeat.sh
检查效果:
filebeat version
2、简单应用
根据对ELK的经典架构的了解,他的数据收集和处理流程是:filebeat -> logstash -> elasticsearch -> kibana
,接下来就写一个简单的数据收集,然后将数据传输到logstash
编辑配置文件:
cd /data/server/filebeat/
ls
结果显示:filebeat.yml 这就是filebeat的配置文件,里面有12部分的配置,而重点关心的就是"Filebeat inputs" 和 “Outputs”
默认效果:
egrep -v '#|^$' filebeat.yml
属性解析:
① 默认的数据分片个数是:1
② 默认配置的输入信息是获取本机上的系统日志,但是从文件输入的功能没有开启,输出目标是elasticsearch
我们基于该配置文件中的信息,拷贝一份稍作修改,生成一个新的文件test.yml:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
output.elasticsearch:
hosts: ["master.itcast.com:9200"]
template.name: "filebeat"
属性解析:
① enabled:true 表示启用这条配置
② template.name 在将数据传入到elasticsearch的时候,自动添加一个索引,名称是:filebeat
控制台启动,方便调试:
filebeat -e -c test.yml
调试完成,后台启filebeat:
nohup filebeat -e -c test.yml > /dev/null 2>&1 &
回到elasticsearch查看效果:
curl 192.168.203.151:9200/_cat/indices
结果显示:在elasticsearch中多了好几条索引数据,索引命名格式:“自定义索引名-版本号-日期-6位编号”
总结
- 集群基础
- 时间同步:集群间通信的基础功能
- 免密认证:集群间通信的认证功能
- java环境:ELK环境的基础软件环境
- elasticsearch部署
- 专属账号:elasticsearch默认情况下,只允许普通用户启动
- 软件部署:软件获取及其变量配置、软件启动配置项、软件启动依赖项
- 软件启动:elasticsearch -d -p pid
- 简单命令
- logstash部署
- 软件部署前提:java环境
- 软件部署:解压软件、设置环境变量、启动logstash、检查效果
- ogstash设置组成:input、output、filter
- kibana部署
- 软件部署:获取软件 - 参数配置 - 启动程序
- 检查效果:打开页面 - 页面简介
- filebeat部署
- 软件部署:软件解压 - 环境变量
- 简单应用:核心配置 - input+output
10. 应用
- 应用ELK综合测试流程
1. 实践案例
1.1 需求简介
项目经典效果图
在项目中,esay_buy的日志信息已经输出到定制的目录里面了,那么接下来,就以easy_buy的日志数据为对象,使用filebeat来获取这些日志,将其输入到logstash中,logstash接收到数据后,定制显示格式,将其输入到elasticsearch中,kibana从elasticsearch中获取数据,并展示到当前界面。
1.2 流程分析
① 确定meiduo_mall的日志文件
② filebeat读取本机的meiduo_mall日志,并传输到logstash
③ logstash接收到数据后,定制输出格式,将数据转交给elasticsearch
④ kibana根据定制的索引名称,从elasticsearch中获取数据。
1.3 关键点分析
① 准备工作
meiduo_mall的日志文件路径在/var/log/nginx/access.log,来获取.log格式文件数据
② filebeat数据收集
基于默认的input方式确定数据文件,output方式选择logstash
注意:input内部的enabled必须开启
③ logstash传输
基于input属性获取filebeat的内容,基于output属性将数据发送给elasticsearch
④ kibana展示
基于索引名称到elasticsearch获取数据,然后在discover中确认数据
1.4 实施方案
① 环境还原
- 清空filebeat程序
- 关闭kibana程序
- 清空elasticsearch索引
② 定制filebeat
- 编写配置文件
- 启动filebeat
③ 定制logstash
- 定制logstash文件
- 启动logstash
④ 定制kibana
- 配置查询索引
- 验证效果
2. 项目实践
2.1 环境还原
清空filebeat程序
# 找到进程id然后kill掉
ps -ef | grep filebeat
关闭kibana程序:
# 如果是后台运行,通过查看5601端口的pid关闭
lsof -Pti:5601
kill -9 <进程id>
执行如下脚本,清空elasticsearch索引库:
# 删除索引
for index in $(curl -s 192.168.203.151:9200/_cat/indices | awk '{print $3}')
do
curl -X DELETE 192.168.203.151:9200/$index
done
2.2 定制filebeat
编写配置文件:
cd /data/server/filebeat
touch meiduo.yml
# vi meiduo.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
output.logstash:
hosts: ["master.itcast.com:5044"]
属性解析:我们这里主要是 paths和logstash
此处后台启动filebeat(也可以在前台运行):
# 终端运行
filebeat -e -c meiduo.yml
# 后台运行
nohup filebeat -e -c meiduo.yml > /dev/null 2>&1 &
检查效果:
ps aux | grep filebeat
2.3 定制logstash
定制logstash文件:
- 1、进入logstash目录:
cd /data/server/logstash
- 2、新建配置文件:
touch config/meiduo.conf
- 3、把如下配置写入新建的配置文件
# vi config/meiduo.conf
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => ["master.itcast.com:9200"]
index => "meiduo_mall-%{+YYYY.MM.dd}"
}
}
属性解析:
① input.beats.port:主要是用于filebeat暴露的端口
② output.elasticsearch:用于设定传输给elasticsearch的信息格式
启动logstash:
# 终端运行
logstash -f config/meiduo.conf
# 后台运行
logstash -f config/meiduo.conf > /dev/null 2>&1 &
检查效果:
netstat -tnulp | grep 9600
2.4 定制kibana
配置查询索引:
curl 192.168.203.163:9200/_cat/indices
结果显示:数据确实传到了elasticsearch这里
su kibana
# 终端运行
kibana -c /data/server/kibana/config/kibana.yml
# 后台运行
kibana -c /data/server/kibana/config/kibana.yml >>/dev/null 2>&1 &
检查效果:
netstat -tnulp | grep 5601
2.5 在kibana主页中查看日志
浏览器登录到<kibana运行所在主机>:5601
,点击左上角的logo图标,进入到home页面:
点击"使用ElasticSearch数据"下面的"链接到您的ElasticSearch索引":
编写我们自定义的索引名称meiduo_mall-*,这样就会显示elasticsearch中符合条件的数据,效果如下:
看到绿色的"成功! …",表示索引找到了,接下来点击"下一步":
在下拉框中,选择以"@timestamp"时间戳的方式作为过滤条件,然后点击"创建索引模式":
结果显示:我们收集到的数据中,包含31个字段,当我们点击某些属性的时候,还会显示简单的排序,到此为止,我们的kibana从elasticsearch中获取数据就配置完毕了
点击左边栏的第一个"Discover"按钮,点击"添加筛选"的下拉框,选择meiduo_mall*索引名,在"Refresh"左侧选择日志的时间范围,就可以实时的查看到所有数据的获取效果:
注:Filters部分的规则,其实就是日志中的键名是否包含某些关键信息,例如:message is 404,点开每条记录旁边的">"表示查看该条日志的具体信息
结果显示:
① View surrounding documents:查看所有日志的列表
② View single document:显示单条日志的具体信息
③ 单独显示的都是一个个的键名,如果我们想要将单独获取message中的部分数据,那么我们就需要将定制的日志设置为json格式
总结
- 简单实践
- 方案实施:流程分析-技术点分析-实施方案-方案执行-效果检查
11. ES搜索引擎插件
1. 概念解析
1.1 集群术语
集群(Cluster):
集群是由一个或多个节点(服务器)作为一个整体来存储数据,并供在所有节点联合索引和搜索功能的集合。一个 集群是由唯一的一个名称(cluster.name)来确定,默认为elasticsearch,相同集群名称的节点主机会组成一个集 群;在使用过程中,同一网段的多个环境要确保集群名称必须唯一,否则节点会加入到错误的集群当中。
节点(Node):
节点是集群的组成部分,存储数据并参与数据的索引和搜索功能;在集群中,节点通过配置文件中指定的节点名作为标识。
节点通过配置的cluster.name发现并加入集群,启动多个相同cluster.name的节点,假设节点之间可以互相发 现,则多个节点将自动组成一个集群;在一个单一的集群中,你可以增加多个节点,如果网络上没有其他启动的节点,则该节点将作为一个单节点集群。
1.2 存储术语
索引(idnex):
索引是具有类似特征的文档的集合,索引是由一个名字标识(必须是全部小写),该名字用来指定对哪个索引进行索引、搜索、更新 、删除操作。在一个集群中,可以根据需求定义多个索引。
ElasticSearch把数据存放到一个或者多个索引(indices)中。索引存放和读取的基本单元是文档(Document) 。
类型(type):
在一个索引中,你可以指定多个类型;一个类型为具有一组共同的字段的文档中定义;每个文档在ElasticSearch中都必须设定它的类型。文档类型使得同一个索引中在存储结构不同的文档时,只需要依据文档类型就可以找到对应的参数映射(Mapping)信息,方便文档的存取。
例如:博客平台,可以将所有数据存储在一个索引里面,用户信息、博客信息可以用不通的类型来区分。
文档(document):
在ElasticSearch中,文档(Document)是主要的存在实体。所有的ElasticSearch应用需求到最后都可以统一建模成一个检索模型:检索相关文档。文档(Document)由一个或者多个域(Field)组成,每个域(Field)由一个域名和一个或者多个值组成(有多个值的值称为多值域(multi-valued))。
在ElasticSeach中,每个文档(Document)都可能会有不同的域(Field)集合;也就是说文档(Document)是没有固定的模式和统一的结构。
分片(shards):
索引可以存储大量数据,可以超过单个节点的硬件限制,即使可以存储在单个节点上,也会导致搜索请求太慢。 为了解决上述问题,Elasticsearch会自动将索引切分为多个分片(shards),当你创建索引时,你可以指定分片数量,每个分片是独立并且全功能的,可以存储在集群中任何数据节点上;散布这些分配的过程叫做分片处理(sharding) 。
需要分片的原因:
① 允许你水平分割/扩展你的内容量
② 允许你分发和并行跨分片操作(可能在多个节点),从而提高性能/吞吐量
分片在集群中的分布及搜索时文档的聚合返回完全由Elasticsearch管理,整个过程对用户透明;尽管索引分片这个过程是自动的,但是在应用中需要事先调整好参数。因为集群中分片的数量需要在索引创建前配置好,而且服务器启动后是无法修改的,至少目前无法修改。
副本(Replicas):
通过索引分片机制(Sharding)可以向ElasticSearch集群中导入超过单机容量的数据,客户端操作任意一个节点即可实现对集群数据的读写操作。当集群负载增长,用户搜索请求阻塞在单个节点上时,通过索引副本(Replica)机制就可以解决这个问题。
索引副本(Replica)机制的的思路很简单:为索引分片创建一份新的拷贝,它可以像原来的主分片一样处理用户搜索请求。同时也顺便保证了数据的安全性。即使主分片数据丢失(主分片所在主机宕机),ElasticSearch通过索引副本使得数据不丢失。
索引副本可以随时添加或者删除,所以用户可以在需要的时候动态调整其数量。
需要副本的原因:
① 保证了集群的高可用,因此副本的存储均不会分配在同一个节点上
② 可以提高搜索量/吞吐量,因为搜索可以并行操作所有副本
2. 配置详解
2.1 文件结构
查看elasticsearch的目录结构:
tree -L 1 /data/server/elasticsearch
tree -L 1 /data/server/elasticsearch/config
2.2 配置文件
elasticsearch.yml作为elasticsearch的主配置文件,主要有8部分组成:Cluster、Node、Paths、Memory、Network、Discovery、Gateway、Various。
而我们一般重点关注的是:Cluster、Node、Paths、Network、Discovery这5项。
Cluster部分
cluster.name: elastic.itcast.com
Node部分
node.name: master.itcast.com
Paths部分
path.data: /data/server/elasticsearch/data
path.logs: /data/server/elasticsearch/logs
Network部分
network.host: 0.0.0.0
http.port: 9200
Discover部分
discovery.seed_hosts: ["master.itcast.com", "node.itcast.com"]
cluster.initial_master_nodes: ["master.itcast.com"]
分片设置
默认情况下,elasticsearch将分片相关的配置从配置文件中的属性移除了,可以借助于一个默认的模板接口 将索引的分片属性更改成我们想要的分片效果:
curl -XPUT 'http://192.168.203.151:9200/_template/template_http_request_record' -H 'Content-Type: application/json' -d '{"index_patterns": ["*"], "settings": {"number_of_shards": 5, "number_of_replicas": 1}}'
属性解析:
接口地址:_template/template_http_request_record
索引类型:index_patterns
分片数量:number_of_shards
副本数量:number_of_replicas
3. 插件管理
安装在``192.168.203.151`主机中;
3.1 插件基础
elasticsearch最擅长的场景就是索引的操作,而索引的使用场景在不同的公司非常不同,所以elasticsearch的索引场景可以基于不同的插件来实现对应的功能,而插件也是ELK非常重要的属性。
插件操作
安装插件:
# ① 在线方式
elasticsearch-plugin install [plugin_name]
# ② 离线方式
将下载的插件解压到elasticsearch的plugins目录即可
注:elasticsearch-plugin安装的是默认插件,第三方的插件可以基于离线方式来安装
查看已安装插件:
elasticsearch-plugin list
删除插件:
elasticsearch-plugin remove [plugin_name]
注:删除插件的时候,推荐先关闭结点,然后再关闭
常见插件:
- 分词插件:analysis-icu、analysis-ik等
- 管理插件:head、kopf、bigdest等
3.2 head插件
安装配置:
准备工作:
apt-get install -y nodejs nodejs-legacy npm
npm -v
node -v
获取插件:
mkdir -p /data/softs/elk/plugins/
cd /data/softs/elk/plugins/
# 此处请提前把elasticsearch-head-master.zip包放入/data/softs/elk/plugins目录中
unzip elasticsearch-head-master.zip -d /data/server/
chown -R elastic.elastic /data/server/elasticsearch-head-master/
cd /data/server/elasticsearch-head-master
npm config set registry https://registry.npm.taobao.org
npm cache clean --force
npm install -g grunt
npm install --ignore-scripts
注:
① head插件不要放在plugins目录中,否则elasticsearch无法启动
② 仓库默认为:http://registry.cnpmjs.org/
③ --ignore-scripts:防止package.json中的自定义脚本不支持
编辑配置:
vi Gruntfile.js
配置es地址:
vi _site/app.js
启动插件:
# 终端执行
grunt server
# 后台执行
grunt server >>/dev/null 2>&1 &
端口检查:
netstat -tnulp | grep 9100
基础操作
浏览器输入192.168.203.151:9100,默认访问的是elasticsearch的概览页面:
点击左上角的"索引",可以看到索引相关信息:
点击"数据浏览",可以看到能匹配到的所有数据:
结果显示:当我们随便点击一个索引的时候,会自动弹出一个界面显示该索引的详情
点击"基本查询",可以根据条件语句进行相关数据的查询:
注:标签头右侧的"[+]"表示增加一栏
复合查询,自定义索引名称为"/username/itcast",操作符号为"POST",接着以json的方式输入数据,点击"提交":
[外链图片转存失败,源站可能有防盗链机制,建议
属性解析:
- _index:创建了一个索引index
- _type:创建了一个类型itcast
- total:分片2个
- successful:成功1个
- failed:失败0个
- created:状态成功
注:可以在这里进行各种各样的编辑,"POST"的下拉框可以选择多种http操作属性
3.3 analysis-ik插件
安装配置
安装插件:
# 注:下面的命令在192.168.203.151主机下执行
cd /data/softs/elk/plugins/
elasticsearch-plugin install file:///data/softs/elk/plugins/elasticsearch-analysis-ik-7.3.2.zip
关闭elasticsearch:
lsof -Pti :9200
kill -9 <进程id>
启动elasticsearch:
su elastic
# 终端运行
elasticsearch
# 后台运行
elasticsearch -d
注:启动elasticsearch需要先切换到elastic用户中
检查效果:
elasticsearch-plugin list
使用插件
属性解析:
- ik_smart:会做最粗粒度的拆分,比如会将"中华人民共和国国歌"拆分为"中华人民共和国、国歌"
属性解析:
- ik_max_word:会将文本做最细粒度的拆分,比如会将"中华人民共和国国歌"拆分为"中华人民共和国、中华人民、中华、华人、人民共和国、人民、人、民、共和国、共和、和、国国、国歌",会穷尽各种可能的组合
总结
- 概念解析
- 集群、节点、索引、类型、文档、分片、副本
- 配置详解
- 文件结构
- bin、config、java、plugins
- 配置结构
- 五大核心配置部分:Cluster、Node、Paths、Network、Discovery
- 端口详情
- 9200:elasticsearch对外提供服务的接口
- 9300:集群节点间的通信端口
- 文件结构
- 插件管理
- 基本操作命令:elasticsearch-plugin install|list|remove|…
- 常用插件:head、ik