目录
一、概述
(一)ELK构成
(二)作用
(三)为什么要使用ELK?
二、组件
(一)Elasticsearch
1、作用:
2、特点:
1)分布式:
2)零配置:
3)自动发现:
4)索引自动分片:
5)索引副本机制:
6)Restful风格接口:
7)多数据源:
8)自动搜索负载均衡:
(二)Logstash
1、作用:
2、工作过程:
(三)Kibana
三、架构类型
四、实验案例
1、实验拓补
2、实验要求
3、安装node1与node2节点的elasticsearch
3.1、配置node1、node2配置文件
3.2、启动服务,查看监听
3.2、网页测试查看
4、安装elasticsearch-head插件( node1 )
4.1、安装node
4.2、拷贝命令
4.3、 安装elasticsearch-head
4.4、修改elasticsearch配置文件
4.5、 启动elasticsearch-head
5、安装logstash( node1 )
5.1、制作命令软链接
5.2、测试1: 标准输入与输出
5.3、测试2: 使用rubydebug解码
5.4、测试3:输出到elasticsearch
6、logstash日志收集文件格式(默认存储在/etc/logstash/conf.d
6.1、案例:通过logstash收集系统信息日志
7、 安装kibana ( node1 )
7.1、配置 kibana
7.2、启动服务( kibana )
7.3、打开网页进行访问
8、企业案例
8.1、在第三台虚拟机安装Nginx服务进行测试
8.2、编写nginx日志收集配置文件
8.3、使用logstash命令导入配置:
8.4、使用kibana查看即可
ELK 是一个用于日志管理和分析的开源软件栈,由三个核心组件组成:Elasticsearch、Logstash和Kibana。
Elasticsearch:一个基于分布式搜索引擎的实时分析存储引擎,用于存储、检索和分析大规模数据。它支持水平扩展,具有高可用性和强大的搜索功能。
Logstash:一个开源数据收集引擎,用于收集、处理和转发各种类型的日志数据。它可以从不同的数据源中收集数据,并对数据进行过滤、转换和加工,最后将数据传输到 Elasticsearch 中进行存储和索引。
Kibana:一个基于Web的数据可视化工具,用于在 Elasticsearch 中对数据进行实时搜索、分析和可视化。它提供了丰富的数据仪表盘、图表和图形化界面,使用户能够直观地理解和分析日志数据。
ELK 被广泛应用于日志管理、系统监控、安全事件分析等领域。它能够帮助用户将海量的日志数据转化为可视化的分析结果,从而提升对系统运行状态和问题的监控、排查和分析能力。
日志管理:ELK 可以帮助企业收集、存储和管理大规模的日志数据。通过 Logstash 收集各种类型的日志数据,并将其传输到 Elasticsearch 进行存储和索引。用户可以方便地搜索、过滤和分析日志数据,从而快速定位和解决问题。
安全分析:ELK 能够帮助企业对安全事件进行监控和分析。通过收集和分析日志数据,可以发现异常行为、安全漏洞和潜在的威胁。用户可以定制报警规则,及时发现并应对安全事件,提高系统的安全性。
数据分析:ELK 还可以进行大规模数据的分析和挖掘。通过 Elasticsearch 的搜索和聚合功能,用户可以对存储在其中的数据进行复杂的查询和分析。这有助于用户了解业务趋势、用户行为等信息,从而做出更好的决策和优化业务流程。
实时监控:ELK 提供实时的数据可视化和监控功能。通过 Kibana,用户可以创建丰富的仪表盘、图表和报表,对数据进行实时查询和可视化展示。这使得用户能够及时了解和监测系统的运行状态,及时发现并解决潜在的问题。
大数据存储和分析:ELK是一个强大的大数据存储和分析平台,可以处理海量数据,并且提供实时的搜索、分析和可视化功能。它的分布式架构能够处理数十亿条日志数据,并且可以快速地进行搜索和分析。
实时监控和故障排除:ELK可以实时监控和分析系统日志和事件,帮助用户快速识别和解决问题。通过实时可视化仪表盘,用户可以实时查看系统的状态和性能指标,并对异常情况进行快速响应。
安全审计和合规性:ELK可以帮助组织进行安全审计和合规性监控。通过收集和分析系统和应用程序的日志信息,可以及时发现潜在的安全风险和违规行为,并采取相应的措施。
弹性和可扩展性:ELK是一个高度可扩展和弹性的平台,可以根据需求自动扩展和缩减资源。它支持水平扩展,可以轻松地处理更多的数据和请求。
开源和活跃的社区支持:ELK是一个开源项目,并且有一个活跃的社区支持。用户可以通过社区获取免费的技术支持和更新,还可以与其他用户分享经验和最佳实践。
日志对于分析系统、应用的状态十分重要,但一般日志的量会比较大,并且比较分散。
如果管理的服务器或者程序比较少的情况我们还可以逐一登录到各个服务器去查看、分析。但如果服务器或者程序的数量比较多了之后这种方法就显得力不从心。基于此,一些集中式的日志系统也就应用而生。目前比较有名成熟的有,Splunk(商业)、FaceBook 的Scribe、Apache的Chukwa Cloudera的Fluentd、还有ELK等等。
Elasticsearch是一个开源的分布式搜索和分析引擎,能够快速地进行全文搜索、实时分析和存储大规模数据。它是基于Apache Lucene库开发而来的,提供了可靠的搜索引擎和分析功能。
同时Elasticsearch也是一个分布式系统,可以在多个服务器上运行,这使得它能够处理大量的数据并具有高可用性。它使用分片和复制机制来实现数据的分布式存储和高可用性。每个分片是一个独立的Lucene索引,可以在集群中的任何节点上进行读写操作。
主要用于日志分析,是开源的日志收集、分析、存储程序
Elasticsearch是一个分布式系统,可以在多个节点上分布数据和处理搜索请求,提高了系统的性能和可扩展性。
Elasticsearch拥有自动化的配置和管理,几乎不需要进行复杂的配置就可以开始使用。默认情况下,它会自动进行数据分片、复制和负载均衡。
当启动一个新的Elasticsearch节点时,它会自动加入到集群中,并与其他节点建立连接和通信。这种自动发现机制可以简化集群的管理和扩展。
Elasticsearch会自动将数据分成多个索引分片进行存储和处理。每个分片是一个独立的Lucene索引,可以在集群中的任何节点上进行读写操作。
Elasticsearch支持索引的副本机制,可以在多个节点上复制数据,提高数据的可用性和容错性。副本也可以用于增加搜索和读取的吞吐量。
Elasticsearch使用基于HTTP的Restful接口进行与系统的交互,使得用户可以用多种编程语言进行操作和管理。
Elasticsearch可以从多个数据源中提取数据进行索引和搜索,包括数据库、文件系统、网络和其他数据源。
Elasticsearch会自动将搜索请求分发到集群中的不同节点上,实现搜索负载均衡,提高搜索的速度和性能。
Logstash是一种开源的数据收集引擎,用于处理和传输数据。它可以从各种来源(如日志文件、数据库、消息队列等)中收集数据,并将其转化为统一的格式,然后将数据发送到目标位置(如Elasticsearch、Hadoop等)。Logstash提供了丰富的插件和过滤器,可以对数据进行解析、转换和处理,以满足各种数据处理和分析的需求。它允许用户根据自己的需求自定义数据流程,并具有高度的可扩展性和灵活性。
主要用于日志收集,是搜集、分析、过滤日志的工具
一般工作方式为c/s架构,Client端安装在需要收集日志的服务器上,Server端负责将收到的各节点日志进行过滤、修改等操作,再一并发往Elasticsearch上去
Inputs → Filters → Outputs |
输入 --> 过滤 --> 输出 |
输入阶段: Logstash通过输入插件从各种来源收集数据。输入插件可以从日志文件、数据库、消息队列、网络等多种来源获取数据。Logstash支持多线程输入处理,可以并行地收集和处理多个输入源的数据。
INPUT
File:从文件系统的文件中读取,类似于tail -f命令
Syslog:在514端口上监听系统日志消息,并根据RFC3164标准进行解析
Redis:从redis service中读取
Beats:从filebeat中读取
过滤阶段: 收集到的数据经过过滤器插件进行解析、转换和处理。过滤器插件可以根据需要执行各种操作,如解析日志格式、提取字段、过滤无用数据、转换数据格式等。用户可以按照自己的需求自定义过滤器链,多个过滤器会按顺序依次处理数据。
FILETER
Grok:解析任意文本数据,Grok 是 Logstash 最重要的插件。它的主要作用就是将文本格式的字符串,转换成为具体的结构化的数据,配合正则表达式使用。
官方提供的grok表达式:logstash-patterns-core/patterns at main · logstash-plugins/logstash-patterns-core · GitHub
Grok在线调试:Grok Debugger
Mutate:对字段进行转换。例如对字段进行删除、替换、修改、重命名等。
Drop:丢弃一部分Events不进行处理。
Clone:拷贝Event,这个过程中也可以添加或移除字段。
Geoip:添加地理信息(为前台kibana图形化展示使用)
输出阶段: 处理过的数据被发送到指定的输出插件,输出插件将数据发送到目标位置。目标位置可以是Elasticsearch、Hadoop、关系数据库、消息队列等。Logstash支持多个输出插件同时发送数据,用户可以根据需求将数据发送到不同的目标位置。
OUTPUTS
Elasticsearch:可以高效的保存数据,并且能够方便和简单的进行查询。
File:将Event数据保存到文件中。
Graphite:将Event数据发送到图形化组件中,踏实一个当前较流行的开源存储图形化展示的组件。
主要用于日志可视化,是为Logstash和ElasticSearch在收集、存储的日志基础上进行分析时友好的Web界面,可以帮助汇总、分析和搜索重要数据日志。
Kibana是一个开源的数据可视化和分析平台,用于实时地搜索、分析和可视化存储在Elasticsearch中的数据。它提供了一个直观的用户界面,让用户可以通过各种图表、图形和地图等方式来展示和探索数据。
Kibana允许用户通过查询和过滤数据来实时地搜索和分析数据。用户可以使用Kibana的查询语言来执行复杂的搜索操作,并将结果可视化为各种图表和图形,如折线图、柱状图、饼图、仪表盘等。用户可以在图表中设置各种参数和聚合操作,以便更好地理解和分析数据。
此外,Kibana还提供了强大的仪表盘功能,允许用户创建个性化的仪表盘来组织和展示多个图表和可视化组件。用户可以自由地排列和定制仪表盘上的各个组件,并将其保存和共享给其他用户。
Kibana与Elasticsearch紧密集成,可以直接从Elasticsearch获取数据进行可视化和分析。它也可以与Logstash和Beats等工具配合使用,实现全面的日志收集、存储、搜索和分析解决方案。
Elasticsearch 简称 es
logstash:
重量级、占用系统资源较多filebeat:
轻量级、占用系统资源较少
ELK ( es、logstash、kibana )
ELKK ( es、logstash、kafka、kibana )
ELFK( es、logstash、filebeat、kibana )
ELFKK( es、logstash、filebeat、kafka、kibana )
构建ELK集群
虚拟机内存建议至少2G
虚拟机处理器内核总数至少4个
更改主机名
hostnamectl set-hostname node1
bash
hostnamectl set-hostname node2
bash
添加本地缓存
vim /etc/hosts
提前下载这些软件包用于后续使用
cd /root/elk
rpm -ivh elasticsearch-5.5.0.rpm
vim /etc/elasticsearch/elasticsearch.yml
更改配置文件内容
node1:
cluster.name:my-elk-cluster #集群名称
node.name:node1 #节点名字
path.data:/var/lib/elasticsearch #数据存放路径
path.logs: /var/log/elasticsearch/ #日志存放路径
bootstrap.memory_lock:false #在启动的时候不锁定内存
network.host:0.0.0.0 #提供服务绑定的IP地址,0.0.0.0代表所有地址
http.port:9200 #监听端口为9200
discovery.zen.ping.unicast.hosts:["node1","node2"] #集群发现通过单播实现
node2:
注:配置项内容不变,只需更改node1为node2
scp /etc/elasticsearch/elasticsearch.yml node2:/etc/elasticsearch/
cluster.name:my-elk-cluster #集群名称
node.name:node2 #节点名字
path.data:/var/lib/elasticsearch #数据存放路径
path.logs: /var/log/elasticsearch/ #日志存放路径
bootstrap.memory_lock:false #在启动的时候不锁定内存
network.host:0.0.0.0 #提供服务绑定的IP地址,0.0.0.0代表所有地址
http.port:9200 #监听端口为9200
discovery.zen.ping.unicast.hosts:【"node1","node2"】 #集群发现通过单播实现
systemctl start elasticsearch
netstat -anptu | grep 9200
curl 192.168.11.111:9200
curl 192.168.11.111:9200
cd elk
tar xf node-v8.2.1.tar.gz
cd node-v8.2.1
./configure && make -j 4 && make install
注:可能需要编译十分钟往上,时间略长,编译时无需进行任何操作,等待即可。这里使用的是 -j 4 进行编译。按照自己系统进行安装即可
cd /root/elk
tar xf phantomjs-2.1.1-linux-x86_64.tar.bz2
cd phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin
cd /root/elk
tar xf elasticsearch-head.tar.gz
cd elasticsearch-head
npm install
vim /etc/elasticsearch/elasticsearch.yml
在配置文件最后添加内容
http.cors.enabled: true #开启跨域访问支持,默认为false
http.cors.allow-origin: "*" #跨域访问允许的域名地址
重启服务
systemctl restart elasticsearch
cd /root/elk/elasticsearch-head
npm run start &
查看监听
访问测试
curl 192.168.11.111:9100
网页访问测试
测试
curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'Content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
刷新浏览器可以看到对应信息即可
cd /root/elk
rpm -ivh logstash-5.5.1.rpm
systemctl start logstash.service
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
logstash -e 'input{ stdin{} }output { stdout{} }'
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug }}'
logstash -e 'input { stdin{} } output { elasticsearch{ hosts=>["192.168.11.111:9200"]} }'
Logstash配置文件基本由三部分组成:input、output以及 filter(根据需要)。标准的配置文件格式如下:
input (...) 输入
fileter {...} 过滤
output {...} 输出
在每个部分中,也可以指定多个访问方式。例如,若要指定两个日志来源文件,则格式如下:
input {
file{path =>"/var/log/messages" type =>"syslog"}
file { path =>"/var/log/apache/access.log" type =>"apache"}
}
赋予权限,编辑配置文件
chmod o+r /var/log/messages
vim /etc/logstash/conf.d/system.conf
文件内容
input {
file{
path =>"/var/log/messages"
type => "system"
start_position => "beginning"
}
}
output {
elasticsearch{
hosts =>["192.168.11.111:9200"]
index => "system-%{+YYYY.MM.dd}"
}
}
重启日志服务
systemctl restart logstash
访问网站进行检查
vim /etc/kibana/kibana.yml
2行 server.port: 5601 #Kibana打开的端口
7行 server.host: "0.0.0.0" #Kibana监听的地址
21行 elasticsearch.url: "http://192.168.11.111:9200" #和Elasticsearch 建立连接
30行 kibana.index: ".kibana" #在Elasticsearch中添加.kibana索引
systemctl start kibana
192.168.11.111:5601
首次访问需要添加索引,我们添加前面已经添加过的索引:system-*
注:索引在 " 6.1、案例:通过logstash收集系统信息日志 " 中添加的
模拟企业要求:
1、收集httpd访问日志信息
2、在httpd服务器上安装logstash,参数上述安装过程
3、logstash在httpd服务器上作为agent(代理),不需要启动
yum install -y epel-release
yum install -y nginx
systemctl start nginx
systemctl start logstash
vim /etc/logstash/conf.d/nginx.conf
input {
file{
path =>"/var/log/nginx/access.log"
type => "access"
start_position => "beginning"
}
}
output {
elasticsearch{
hosts =>["192.168.11.111:9200"]
index => "nginx-%{+YYYY.MM.dd}"
}
}
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
logstash -f /etc/logstash/conf.d/httpd.conf
先访问网页,用于刷新日志
进行访问查看
创建索引进行查看
总结
通过学习ELK,我深刻理解了日志管理和分析的重要性,以及ELK在这方面的优势。
首先,ELK提供了强大的日志数据收集和处理能力。Logstash可以从各种来源(如文件、数据库、网络等)收集和过滤日志数据,并进行必要的数据转换和标准化。这使得日志收集变得更加简单和高效,同时可以确保日志数据的准确性和一致性。
其次,ELK的数据存储和索引功能让我印象深刻。Elasticsearch作为分布式搜索引擎,可以在大规模数据的情况下快速地进行数据索引、搜索和聚合。这使得我能够轻松地找到所需的日志数据,并进行更加复杂的数据操作和分析。
最重要的是,ELK的可视化工具Kibana提供了直观、灵活的数据可视化功能。我可以使用各种图表、仪表盘和报表等工具,将数据以直观的方式呈现出来。这不仅帮助我更好地理解和分析数据,还可以与团队共享和交流,提高工作效率。