> 文章列表 > ELK部署

ELK部署

ELK部署

目录

ELK简介

ELK优点

ES核心概念

cluster:群集

Node:节点

Index:索引

shard: 分片

replcas:副本

Logstash工作过程

Logstash和filebeat的区别

Kibanna监测数据

kibanna的功能优势:

部署过程

下载软件包

实验环境

环境准备

安装elasticsearch

 安装elasticsearch-head(100.3)

 安装logstash

示例二

示例三

示例四

Beats数据采集器

kibana部署

kibana创建图形 


ELK简介

ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。

Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。主要负责将日志索引并存储起来,方便业务方检索查询。

Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。是一个日志收集、过滤、转发的中间件,主要负责将各条业务线的各类日志统一收集、过滤后,转发给 Elasticsearch 进行下一步处理。

Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
 

ELK优点

ELK架构优点如下:
1、处理方式灵活。 Elasticsearch是全文索引,具有强大的搜索能力。
2、配置相对简单。 Kibana的配置非常简单,Elasticsearch则全部使用Json接口,配置也不复杂,Logstash的配置使用模块的方式,配置也相对简单。
3、检索性能高。 ELK架构通常可以达到百亿级数据的查询秒级响应。
4、集群线性扩展。 Elasticsearch本身没有单点的概念,自动默认集群模式,Elasticsearch和Logstash都可以灵活扩展。
5、页面美观。 Kibana的前端设计美观,且操作简单。

ES核心概念

cluster:群集

ES可以作为一个独立的单个搜索服务器。不过,为了处理大型的数据库集,实现容错和高可用性,ES可以运行在许多互相合作的服务器上,这些服务器的集合称为集群;
通过选举产生主节点,并提供跨节点的联合索引和搜索的功能。每个群集都有一个唯一标示的名称, 默认是Elasticsearch,每个节点是基于群集名字加入到其群集中的。一个群集可以只有一个节点,为了具备更好的容错性,通常配置多个节点,在配置群集时,建议配置成群集模式。

Node:节点

形成集群的每个单服务器称为节点

Index:索引

在ES中,索引是一组文档的集合,类似于关系型数据库中的”库”,索引的作用相当于一本书的目录,可以根据目录中的页码快速的找到你想要看的内容;在index下面包含存储数据的类型(Type), Type类似于关系型数据库中的“表”,用来存放具体数据

shard: 分片

Elasticsearch 将索引分成若干个部分,每个部分称为一个分片,每个分片就是一个全功能的独立的索引。分片的数量一般在索引创建前指定, 且创建索引后不能更改。默认情况下Elasticsearch中的每个索引被分片成5个主分片和一个索引

replcas:副本

一个好的数据存储方案要求无论何种故障(如节点不可用)下数据都可用,并且具有较高的存储效率。为此,Elasticsearch 将索引分片复制一份或多份,称为副本。副本是索引的另一个备份,用于数据冗余以及负载分担,创建索引后副本数还能再更改,一般开启2-3个为宜

Logstash工作过程

在Logstash中,包括了三个阶段,分别是输入(Input )、处理(Filter,非必需)和输出(Output), 其关系如图所示。

在图中,整个流程为Input收集数据,Filter 处理数据,Output 输出数据。每个阶段也可以指定多种方式,如输出既可以输出到Elasticsearch中,也可以指定到stdout在控制台打印。

Logstash和filebeat的区别

logstash和filebeat都是可以作为日志采集的工具,logstash出现时间要比filebeat早许多。filebeat更轻量,占用资源更少,但logstash 具有filter功能,能过滤分析日志。一般结构都是filebeat采集日志,logstash过滤分析日志。

logstash是使用Java编写,插件是使用jruby编写,对机器的资源要求会比较高。在采集日志方面,对CPU,内存上都要比前者高很多。

总结,他俩关系就跟清洁工人和垃圾车一样,结合上边,你想一想,(注:在这里没有对任何人有偏见的意思,只是为了理解他俩的关系)

Kibanna监测数据

kibana,主要设计用来和Elasticsearch一起工作,可以搜索、查看存储在Elsticearch索引中的数据,并通过各种图表进行高级数据分析及展示。Kibana可以让数据看起来一目了然。它操作简单,基于浏览器的用户界面可以让用户在任何位置都可以实时浏览。

Kibana可以快速创建仪表板(dashboard)实时显示Elasticsearch查询动态。
Kibana使用非常简单,只需要添加索引就可以监测Elasticsearch索引数据。

kibanna的功能优势:

  • Elasticsearch 无缝之集成。Kibana 架构是为Elasticsearch定制的,可以将任何(结构化和非结构化)数据加入Elasticsearch索引,Kibana 还充分利用了Elasticsearch强大的搜索和分析功能。
  • 整合数据,Kibana可以让海量数据变得更容易理解,根据数据内容可以创建形象的柱形图、折线图、散点图,直方图、饼图和地图,以方便用户查看。
  • 复杂数据分析,Kibana提升了Elasticsearch 的分析能力,能够更加智能地分析数据,
  • 接口灵活,分享更容易
  • 配置简单
  • 让更多团队成员受益。
     

部署过程

下载软件包

elasticsearch:        Download Elasticsearch | Elastic

logstash:               Download Logstash Free | Get Started Now | Elastic

kibana:                  Download Kibana Free | Get Started Now | Elastic

filebeat:                下载 Beats:Elasticsearch 的数据采集器 | Elastic

npm:                     Index of /dist/v12.13.1/ (nodejs.org)

redis:                     redis-7.0.4

实验环境

机器名称 IP配置 服务角色
els-01 192.168.100.3 elasticsearch,elasticsearch-head
els-02 192.168.100.101 elasticsearch
logstash 192.168.100.4 logstash
filebeat 192.168.100.5 filebeat
kibana 192.168.100.6 kibana

环境准备

#分别修改主机名
#100.3
hostnamectl set-hostname els-01.lyh.com#100.101
hostnamectl set-hostname els-02.lyh.com#100.4
hostnamectl set-hostname logstash.lyh.com#100.5
hostnamectl set-hostname kibana.lyh.com#100.6
hostnamectl set-hostname filebest.lyh.com#编辑hosts文件
vim /etc/hosts#添加
192.168.100.3 els-01.lyh.com
192.168.100.101 els-02.lyh.com
192.168.100.4 logstash.lyh.com
192.168.100.5 kibana.lyh.com
192.168.100.6 filebest.lyh.com复制到其他几台
scp /etc/hosts root@192.168.100.101:/etc/hosts
scp /etc/hosts root@192.168.100.4:/etc/hosts
scp /etc/hosts root@192.168.100.5:/etc/hosts
scp /etc/hosts root@192.168.100.6:/etc/hosts#关闭防火墙
systemctl stop firewalld#关闭selinux
setenforce 0#同步时间,如果时间同步,忽略此步,安装ntp服务
#在100.3上装
yum -y install ntp
systemctl start ntpd
#其他服务器同步时间
ntpdate 192.168.100.4

安装elasticsearch

100.3

#安装jdk
yum -y install java-1.8.0-openjdk-devel#上传elasticsearch的rpm包,并安装
rpm --install elasticsearch-8.7.0-x86_64.rpm#修改配置文件
vim /etc/elasticsearch/elasticsearch.yml #修改
#集群名称
cluster.name: lyh   #节点名称                                                    
node.name: els-01  #对外通信地址                                                    
network.host: 192.168.100.3  #端口号                                          
http.port: 9200#集群节点
discovery.seed_hosts: ["192.168.100.3:9300","192.168.100.101:9300"]#安全
xpack.security.enabled: false#主节点
cluster.initial_master_nodes: ["els-01"]#开启跨域
http.cors.enabled: true                                                 
http.cors.allow-origin: "*"#启动
systemctl start elasticsearch.servicecurl 192.168.100.3:9200

100.101

#大体和100.3一样#将100.3的配置文件复制到100.101
scp /etc/elasticsearch/elasticsearch.yml root@192.168.100.101:/etc/elasticsearch/elasticsearch.yml #需要修改
#节点名称
node.name: els-02#对外ip
network.host: 192.168.100.101#重启elasticsearch

 安装elasticsearch-head(100.3)

#安装git包
yum -y install gitgit克隆(下载elasticsearch-head)
cd /usr/local/
git clone https://github.com/mobz/elasticsearch-head.git#上传npm包,npm包别下载版本太高的,容易报错
tar -zxvf node-v12.13.1-linux-x64.tar.gz 
mv node-v12.13.1-linux-x64 /usr/local/node#配置环境变量
vim /etc/profile#最后添加
export NODE_HOME=/usr/local/node
export PATH=$NODE_HOME/bin:$PATH#刷新
source /etc/profile#进入elasticsearch-head目录
cd /usr/local/elasticsearch-head/
npm install
#如果上一条命令执行失败,则用下面命令
npm audit fix
npm install --no-optional --verbose#开启9100(后台启动)
nohup npm run start &

 安装logstash

#安装jdkyum -y install java-1.8.0-openjdk-devel.x86_64 #rpm安装
rpm -ivh logstash-8.7.0-x86_64.rpm#添加环境变量
vim /etc/profile
export PATH=$PATH:/usr/share/logstash/bin#刷新
source /etc/profile#编写logstash测试文件
vim /etc/logstash/conf.d/logstash.confinput {stdin {}
}output {stdout{codec => rubydebug}
}#测试
logstash -f /etc/logstash/conf.d/logstash.conf

示例二

#创建20个页面
for i in {1..20}; do echo "Test Page ${i}" > /var/www/html/test${i}.html; done#随机访问页面
for i in {1..20}; do j=$[$RANDOM%20+1]; curl http://192.168.100.4/test${j}.html; done#编辑logstash配置文件
vim /etc/logstash/conf.d/logstash-01.conf input {file{path => ["/var/log/httpd/access_log"]start_position => "beginning"            #起始位置        例如:第一次处理1-200,第二次就从201开始sincedb_path => "/dev/null"              #每次都更新起始位置,每次都从1开始,在公司不需要配置}
}filter {grok {match => {"message" => "%{COMBINEDAPACHELOG}"}remove_field => "message"}date {match => ["timestamp","dd/MMM/YYYY:H:m:s Z"]target => "access_time"remove_field => "timestamp"}
}output {stdout{codec => rubydebug}
}#测试
logstash -f /etc/logstash/conf.d/logstash-01.conf

示例三

geoip模块:利用这个模块分析IP地址

从网上找到GeoLite2-City.mmdb下载下来上传到/etc/logstash

#编写logstash-geoip.conf
/etc/logstash/conf.d/logstash-geoip.confinput {file{path => ["/var/log/httpd/access_log"]start_position => "beginning"}
}
filter {grok {match => {"message" => "%{COMBINEDAPACHELOG}"}}geoip {source => "clientip"target => "geoip"database => "/etc/logstash/maxmind/GeoLite2-City.mmdb"}
}
output {stdout{codec => rubydebug}
}logstash -f /etc/logstash/conf.d/logstash-geoip.conf

示例四

output输出给elasticsearch

vim /etc/logstash/conf.d/logstash-output.conf input {file{path => ["/var/log/httpd/access_log"]start_position => "beginning"sincedb_path => "/dev/null"}
}
filter {grok {match => {"message" => "%{HTTPD_COMBINEDLOG}"}}geoip {source => "clientip"target => "geoip"database => "/etc/logstash/maxmind/GeoLite2-City.mmdb"}
}
output {elasticsearch {hosts => ["http://192.168.100.3:9200/"]index => "logstash-%{+YYYY.MM.dd}"}
}logstash -f /etc/logstash/conf.d/logstash-output.conf 

Beats数据采集器

配置filebeat,目标redis

#上传filebeat并安装
rpm -ivh filebeat-8.7.0-x86_64.rpm#修改配置文件
vim /etc/filebeat/filebeat.yml ....# Change to true to enable this input configuration.enabled: truepaths:- /var/log/httpd/*log
....# ---------------------------- Elasticsearch Output ----------------------------
全部注释# ------------------------------ Logstash Output -------------------------------
全部注释# ------------------------------ redis Output ----------------------------------
output.redis:hosts: ["192.168.100.4"]        #redis 数据库Ippassword: "123123"              #密码key: "logs"                     #键值datatype: "list"                #类型db: 0                           #第几个数据库timeout: 5                      #超时时间
#编辑logstash的.conf文件
#先删除/etc/logstash/conf/刚刚测试的rm -rf /etc/logstash/conf/*#编辑新的.conf文件
vim /etc/logstash/conf.d/httpd_log.conf input {redis {host => "192.168.100.4"port => "6379"password => "123123"data_type => "list"key => "logs"threads => 2type => "redis_mes"}
}
filter {grok {match => {"message" => "%{HTTPD_COMBINEDLOG}"}}date {match => ["timestamp","dd/MMM/YYYY:H:m:s Z"]remove_field => "timstamp"}
}
output {elasticsearch {hosts => ["http://192.168.100.3:9200/"]index => "logstash-%{+YYYY.MM.dd}"}
}

kibana部署

#上传kibana包并安装
rpm -ivh kibana-8.7.0-x86_64.rpm #修改配置文件
vim /etc/kibana/kibana.yml server.port: 5601
server.host: "0.0.0.0"
server.name: "kibana.lyh.com"                            
i18n.locale: "zh-CN"                                      #汉化
elasticsearch.hosts: ["http://192.168.100.3:9200"]        #elasticsearchIP#开启kibana
systemctl start kibana.service 

kibana创建图形 

 如果想更改图形的话

 这里有很多图形

 随便保存一个图形

 在这可以找到你刚才保存的