目录
ELK简介
ELK优点
ES核心概念
cluster:群集
Node:节点
Index:索引
replcas:副本
Logstash工作过程
Logstash和filebeat的区别
Kibanna监测数据
kibanna的功能优势:
部署过程
下载软件包
实验环境
环境准备
安装elasticsearch
安装elasticsearch-head(100.3)
安装logstash
示例二
示例三
示例四
Beats数据采集器
kibana部署
kibana创建图形
ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。
Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。主要负责将日志索引并存储起来,方便业务方检索查询。
Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。是一个日志收集、过滤、转发的中间件,主要负责将各条业务线的各类日志统一收集、过滤后,转发给 Elasticsearch 进行下一步处理。
Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
ELK架构优点如下:
1、处理方式灵活。 Elasticsearch是全文索引,具有强大的搜索能力。
2、配置相对简单。 Kibana的配置非常简单,Elasticsearch则全部使用Json接口,配置也不复杂,Logstash的配置使用模块的方式,配置也相对简单。
3、检索性能高。 ELK架构通常可以达到百亿级数据的查询秒级响应。
4、集群线性扩展。 Elasticsearch本身没有单点的概念,自动默认集群模式,Elasticsearch和Logstash都可以灵活扩展。
5、页面美观。 Kibana的前端设计美观,且操作简单。
ES可以作为一个独立的单个搜索服务器。不过,为了处理大型的数据库集,实现容错和高可用性,ES可以运行在许多互相合作的服务器上,这些服务器的集合称为集群;
通过选举产生主节点,并提供跨节点的联合索引和搜索的功能。每个群集都有一个唯一标示的名称, 默认是Elasticsearch,每个节点是基于群集名字加入到其群集中的。一个群集可以只有一个节点,为了具备更好的容错性,通常配置多个节点,在配置群集时,建议配置成群集模式。
形成集群的每个单服务器称为节点
在ES中,索引是一组文档的集合,类似于关系型数据库中的”库”,索引的作用相当于一本书的目录,可以根据目录中的页码快速的找到你想要看的内容;在index下面包含存储数据的类型(Type), Type类似于关系型数据库中的“表”,用来存放具体数据
Elasticsearch 将索引分成若干个部分,每个部分称为一个分片,每个分片就是一个全功能的独立的索引。分片的数量一般在索引创建前指定, 且创建索引后不能更改。默认情况下Elasticsearch中的每个索引被分片成5个主分片和一个索引
一个好的数据存储方案要求无论何种故障(如节点不可用)下数据都可用,并且具有较高的存储效率。为此,Elasticsearch 将索引分片复制一份或多份,称为副本。副本是索引的另一个备份,用于数据冗余以及负载分担,创建索引后副本数还能再更改,一般开启2-3个为宜
在Logstash中,包括了三个阶段,分别是输入(Input )、处理(Filter,非必需)和输出(Output), 其关系如图所示。
在图中,整个流程为Input收集数据,Filter 处理数据,Output 输出数据。每个阶段也可以指定多种方式,如输出既可以输出到Elasticsearch中,也可以指定到stdout在控制台打印。
logstash和filebeat都是可以作为日志采集的工具,logstash出现时间要比filebeat早许多。filebeat更轻量,占用资源更少,但logstash 具有filter功能,能过滤分析日志。一般结构都是filebeat采集日志,logstash过滤分析日志。
logstash是使用Java编写,插件是使用jruby编写,对机器的资源要求会比较高。在采集日志方面,对CPU,内存上都要比前者高很多。
总结,他俩关系就跟清洁工人和垃圾车一样,结合上边,你想一想,(注:在这里没有对任何人有偏见的意思,只是为了理解他俩的关系)
kibana,主要设计用来和Elasticsearch一起工作,可以搜索、查看存储在Elsticearch索引中的数据,并通过各种图表进行高级数据分析及展示。Kibana可以让数据看起来一目了然。它操作简单,基于浏览器的用户界面可以让用户在任何位置都可以实时浏览。
Kibana可以快速创建仪表板(dashboard)实时显示Elasticsearch查询动态。
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 [email protected]:/etc/hosts
scp /etc/hosts [email protected]:/etc/hosts
scp /etc/hosts [email protected]:/etc/hosts
scp /etc/hosts [email protected]:/etc/hosts
#关闭防火墙
systemctl stop firewalld
#关闭selinux
setenforce 0
#同步时间,如果时间同步,忽略此步,安装ntp服务
#在100.3上装
yum -y install ntp
systemctl start ntpd
#其他服务器同步时间
ntpdate 192.168.100.4
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.service
curl 192.168.100.3:9200
100.101
#大体和100.3一样
#将100.3的配置文件复制到100.101
scp /etc/elasticsearch/elasticsearch.yml [email protected]:/etc/elasticsearch/elasticsearch.yml
#需要修改
#节点名称
node.name: els-02
#对外ip
network.host: 192.168.100.101
#重启elasticsearch
#安装git包
yum -y install git
git克隆(下载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 &
#安装jdk
yum -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.conf
input {
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.conf
input {
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
配置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: true
paths:
- /var/log/httpd/*log
....
# ---------------------------- Elasticsearch Output ----------------------------
全部注释
# ------------------------------ Logstash Output -------------------------------
全部注释
# ------------------------------ redis Output ----------------------------------
output.redis:
hosts: ["192.168.100.4"] #redis 数据库Ip
password: "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 => 2
type => "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包并安装
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
如果想更改图形的话
在这可以找到你刚才保存的