Elastic Stack 日志收集系统笔记

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: Elastic Stack 日志收集系统笔记

关于Elastic Stack


elasticstack是一个应用套件,原名为ELK Stack,由elastic旗下的elasticsearch、

logstash、kibana,filebeat四个组件组成,这四个工具组合形成了一套实用、易用的监控架构,很多公司利用它来搭建可视化的海量日志分析平台。


Elasticsearch简介


Elasticsearch是一个高度可扩展的开源全文搜索和分析引擎。它允许您快速,近实时地存储,搜索和分析大量数据。它通常用作底层引擎/技术,为具有复杂搜索功能和要求的应用程序提供支持。


Logstash简介


logstash是一款轻量级的用于收集,丰富和统一所有数据的开源日志收集引擎,个人理解logstash就像一根管道,有输入的一端,有输出的一端,管道内存在着过滤装置,可以将收集的日志转换成我们想要看到的日志,输入的一端负责收集日志,管道输出的一端会将日志输出到你想要存放的位置,大多数是输出到elasticsearch里面


Kibana简介


Kibana是一个开源分析和可视化平台,旨在与Elasticsearch协同工作。可以轻松地执行高级数据分析,并在各种图表,表格和地图中可视化您的数据。Kibana使您可以轻松理解大量数据。其简单的基于浏览器的界面使您能够快速创建和共享动态仪表板,实时显示Elasticsearch查询的更改。


Filebeat简介


Filebeat是属于Beats系列的日志托运者 - 一组安装在主机上的轻量级托运人,用于将不同类型的数据传送到ELK堆栈进行分析。每个节拍专门用于传送不同类型的信息 - 例如,Winlogbeat发布Windows事件日志,Metricbeat发布主机指标等等。顾名思义,Filebeat提供日志文件。


在基于ELK的日志记录管道中,Filebeat扮演日志代理的角色 - 安装在生成日志文件的计算机上,并将数据转发到Logstash以进行更高级的处理,或者直接转发到Elasticsearch进行索引。因此,Filebeat不是Logstash的替代品,但在大多数情况下可以并且应该同时使用。


Elastic Stack安装配置


Logstash安装


1.安装logstash需要依赖Java8的环境,不支持Java9


使用yuminstall java命令安装


2.下载并安装公共签名密钥


rpm --importhttps://artifacts.elastic.co/GPG-KEY-elasticsearch


3.添加logstash的yum仓库


vim/etc/yum.repos.d/logstash.repo
[logstash-6.x] name=Elastic repository for 6.xpackages baseurl=https://artifacts.elastic.co/packages/6.x/yum gpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1autorefresh=1 type=rpm-md


4.使用yuminstall logstash命令安装logstash


Elasticsearch安装


elasticsearch同样需要Java运行环境


1.下载elasticsearch的tar包


wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.4.0.tar.gz


2.解压包


tar -xzfelasticsearch-6.4.0.tar.gz


3.修改配置文件


[root@elasticelasticsearch-6.4.0]# vim config/elasticsearch.yml


修改内容如下:


cluster.name:my-elk     #设置集群的名字
node.name:es1            #集群中的节点名称,同一集群中的节点名称不能重复
path.data:/elasticsearch/elasticsearch-6.4.0/data   #设置es集群的数据位置
path.logs:/elasticsearch/elasticsearch-6.4.0/logs/   #设置存放日志的路径
network.host:192.168.179.134       #绑定本地ip地址
http.port:9200       #设置开放的端口,默认就是9200端口


4.启动elasticsearch


cdelasticsearch-6.4.0/
./bin/elasticsearch


这里要使用普通用户运行,还要把目录授予普通文件权限


chown -Relker.elker /elasticsearch


5.查看启动状态


输入netstat -ntlp|grep 9200查看9200端口是否监听,可以使用

curl192.168.179.134:9200或者在浏览器上输入192.168.179.134:9200进行查看启动后的状态


640.jpg


5.启动过程出现的报错


[WARN][o.e.b.BootstrapChecks    ] [PWm-Blt]max file descriptors [4096] for elasticsearch process is too low, increase toat least [65536]


解决办法:


vim/etc/security/limits.conf
* softnofile 65536
* hardnofile 131072
* soft nproc2048
* hard nproc4096
[WARN][o.e.b.BootstrapChecks    ] [PWm-Blt]max virtual memory areas vm.max_map_count [65530] is too low, increase to atleast [262144]


解决办法:


vim/etc/sysctl.conf
vm.max_map_count=655360


修改完成执行命令:


sysctl-p


Elasticsearch Head插件安装


对elasticsearch集群的操作一直通过rest请求是比较麻烦的,elasticsearch提供了一个head插件来对elasticsearch集群在浏览器上进行操作,ElasticSearch-head是一个H5编写的ElasticSearch集群操作和管理工具,可以对集群进行傻瓜式操作。下面我们来进行head插件的安装。


1.安装node.js


这里我采用的源码安装,其实二进制安装是比较简单的,但我执行到最后node的二进制文件无法执行,因此只能源码安装,时间有点长,打了两局王者荣耀才装完


wget https://nodejs.org/dist/v8.11.4/node-v8.11.4.tar.gz  #下载node的源码包
tar -zxvfnode-v8.11.4                                                     #解压源码包
./configure && make && make install                               #执行编译安装
echo $?                                                                          #查看执行结果,输出0表示安装成功
node.js默认安装路径在/usr/local/bin/目录下


2.安装grunt


grunt是基于Node.js的项目构建工具,可以进行打包压缩、测试、执行等等的工作,head插件就是通过grunt启动


npm install -g grunt-cli


3.下载并安装head插件


git clonegit://github.com/mobz/elasticsearch-head.git       #克隆head插件仓库
cd elasticsearch-head/
npm install         #执行完会报一些错误,不要管执行下一条命令就会解决
npm install phantomjs-prebuilt@2.1.14 --ignore-scripts


4.修改elasticsearch的配置


vim/elasticsearch/elasticsearch-6.4.0/config/elasticsearch.yml
http.cors.enabled: true                                    #elasticsearch中启用CORShttp.cors.allow-origin: "*"                                 # 允许访问的IP地址段,* 为所有IP都可以访问


5.启用head插件并在浏览器上打开


npm run start    #启动head插件


在浏览器输入http://192.168.179.134:9100/即可使用head插件


640.jpg


在以后的每次启动中,只需要在head插件的目录执行grunt server就可以了


Kibana安装


1.下载并解压kibana包


wget https://artifacts.elastic.co/downloads/kibana/kibana-6.4.0-linux-x86_64.tar.gz

tar -xzfkibana-6.4.0-linux-x86_64.tar.gz


2.修改kibana默认配置


vimkibana-6.4.0-linux-x86_64/config/kibana.yml
server.port:5601                             #kibana默认端口是5601
server.host:"192.168.179.134"       #设置绑定的kibana服务的地址
elasticsearch.url:"http://192.168.179.134:9200"   #设置elasticsearch服务器的ip地址,不修改的话启动的时候会报[elasticsearch] Unable to revive connection: http://localhost:9200/连接不上elasticsearch的错误
kibana.index:".kibana"       #创建一个kibana的索引
3.启动kibana
/kibana-6.4.0-linux-x86_64/bin/kibana
netstat-ntlp |grep 5601   #可以查看5601端口是否启动
在浏览器输入192.168.179.134:5601即可访问kibana


640.jpg


4.出现的警告信息


虽然出现警告信息,不过还是可以启动kibana的,本人有点强迫症,不想看到警告信息

警告信息1:[security] Generating a random key for xpack.security.encryptionKey.To prevent sessions from being invalidated on restart, please setxpack.security.encryptionKey in kibana.yml

解决方法:修改配置文件vimconfig/kibana.yml


在配置文件底部添加


xpack.reporting.encryptionKey:"a_random_string"


警告信息2:[security] Session cookies will be transmitted over insecureconnections. This is not recommended.


解决方法:修改配置文件vimconfig/kibana.yml


在配置文件底部添加


xpack.security.encryptionKey:"something_at_least_32_characters"


5.检查kibana状态


在浏览器输入192.168.179.134:5601/status查看kibana状态,或者输入

http://192.168.179.134:5601/api/status查看json格式的详细状态

Elasticsearch的相关概念与操作


集群


集群是一个或多个节点(服务器)的集合,它们共同保存您的整个数据,并提供跨所有节点的联合索引和搜索功能。


集群健康


Elasticsearch 的集群监控信息中包含了许多的统计数据,其中最为重要的一项就是集群健康,它在status字段中展示为 green 、yellow或者red 。


它的三种颜色含义如下:


green


所有的主分片和副本分片都正常运行。


yellow


所有的主分片都正常运行,但不是所有的副本分片都正常运行。


red


有主分片没能正常运行。


可以在命令行使用curl -X GET"192.168.179.134:9200/_cluster/health"


或者在浏览器上输入192.168.179.134:9200/_cluster/health查看集群健康状态

“unassigned_shards”表示没有分配到任何节点上的副本分片数


节点


节点是作为群集一部分的单个服务器,存储数据并参与群集的索引和搜索功能。一个运行中的Elasticsearch 实例称为一个 节点,而集群是由一个或者多个拥有相同集群名配置的节点组成,它们共同承担数据和负载的压力。当有节点加入集群中或者从集群中移除节点时,集群将会重新平均分布所有的数据。


当一个节点被选举成为 主节点时, 它将负责管理集群范围内的所有变更,例如增加、删除索引,或者增加、删除节点等。而主节点并不需要涉及到文档级别的变更和搜索等操作,作为用户,我们可以将请求发送到集群中的任何节点,包括主节点。每个节点都知道任意文档所处的位置,并且能够将我们的请求直接转发到存储我们所需文档的节点。无论我们将请求发送到哪个节点,它都能负责从各个包含我们所需文档的节点收集回数据,也就是说,你发送的请求发到了整个elasticsearch集群上


索引


索引是具有某些类似特征的文档集合。例如,如果你要收集系统日志,你可以建立一个系统日志的索引。 索引实际上是指向一个或者多个物理分片的逻辑命名空间 。


分片


一个分片是一个底层的工作单元,它仅保存了全部数据中的一部分。 Elasticsearch是利用分片将数据分发到集群内各处的。分片是数据的容器,文档保存在分片内,分片又被分配到集群内的各个节点里。当你的集群规模扩大或者缩小时, Elasticsearch 会自动的在各节点中迁移分片,使得数据仍然均匀分布在集群里。每个分片本身都是一个功能齐全且独立的“索引”,可以托管在集群中的任何节点上。一个分片可以是主分片或者副本分片。 索引内任意一个文档都归属于一个主分片,所以主分片的数目决定着索引能够保存的最大数据量。一个副本分片只是一个主分片的拷贝。 副本分片作为硬件故障时保护数据不丢失的冗余备份,并为搜索和返回文档等读操作提供服务。在索引建立的时候就已经确定了主分片数,但是副本分片数可以随时修改。


在相同节点数目的集群上增加更多的副本分片并不能提高性能,因为每个分片从节点上获得的资源会变少。但是更多的副本分片数提高了数据冗余量。


索引与分片的比较


被混淆的概念是,一个 Lucene 索引 我们在 Elasticsearch 称作分片。一个elasticsearch索引是分片的集合。当 Elasticsearch 在索引中搜索的时候, 他发送查询到每一个属于索引的分片(Lucene 索引),然后像 执行分布式检索 提到的那样,合并每个分片的结果到一个全局的结果集。


创建索引


在命令行中执行curl-X PUT "192.168.179.134:9200/custome?pretty"可以创建一个名为custome的索引,如果要修改索引创建默认的主分片数和副本分片数,可以执行如下命令


[root@elastic~]# curl -X PUT "192.168.179.134:9200/blogs" -H 'Content-Type:application/json' -d'
{                
   "settings" : {
      "number_of_shards" : 3,
      "number_of_replicas" : 1
   }
}


以上命令表示创建了一个包含3个主分片和一个副本(即三个副本分片)的blogs索引

我们还可以在浏览器使用http://192.168.179.134:9200/_cat/indices?v或者在命令行中使用curl -X GET "http://192.168.179.134:9200/_cat/indices?v"查看集群中的索引


640.jpg


可以看到我已经创建了三个索引,并且还可以看到我的集群健康状态显示为yellow,上面说了yellow表示存在副本分片没有正常运行,因为我的elasticsearch集群只有一个节点,elasticsearch不能把同一索引的主分片和副本分配在一个节点上,这样也是没有意义的,因为只要一个节点挂了,节点上的主分片和副本上的数据就都丢失了,也就不存在什么高可用性了


创建文档


在命令行下执行下面的命令可以创建文档


curl -X PUT"192.168.179.134:9200/customer/_doc/1?pretty" -H 'Content-Type:application/json' -d'
{
  "name": "John Doe"
}


640.png


如图所示,我们刚刚在customer索引中创建了一个名为John Doe,ID为1的文档

可以在浏览器使用http://192.168.179.134:9200/customer/_doc/1?pretty或者在命令行中输入curl -X GET192.168.179.134:9200/customer/_doc/1?pretty查看刚刚创建的文档


640.jpg


删除索引


在命令行中使用curl-X DELETE "192.168.179.134:9200/customer"命令可以删除索引

再次查看集群中的索引,会发现customer索引已经不见了


640.jpg


如果要删除全部索引的话可以执行curl -X DELETE "192.168.179.134:9200/_all"或者curl -X DELETE "192.168.179.134:9200/*"


其实可以发现,以上的几条命令都是有固定的命令格式


<REST动作>/<索引>/<类型>/<ID>


删除文档


在命令行执行命令curl-X DELETE "192.168.179.134:9200/customer/_doc/1?pretty"可以删除customer索引ID为1的文档

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
1月前
|
Prometheus 监控 Cloud Native
基于docker搭建监控系统&日志收集
Prometheus 是一款由 SoundCloud 开发的开源监控报警系统及时序数据库(TSDB),支持多维数据模型和灵活查询语言,适用于大规模集群监控。它通过 HTTP 拉取数据,支持服务发现、多种图表展示(如 Grafana),并可结合 Loki 实现日志聚合。本文介绍其架构、部署及与 Docker 集成的监控方案。
261 122
基于docker搭建监控系统&日志收集
WGLOG日志管理系统是怎么收集日志的
WGLOG通过部署Agent客户端采集日志,Agent持续收集指定日志文件并上报Server,Server负责展示与分析。Agent与Server需保持相同版本。官网下载地址:www.wgstart.com
|
4月前
|
监控 API 开发工具
HarmonyOS Next的HiLog日志系统完全指南:从入门到精通
本文深入解析HarmonyOS Next的HiLog日志系统,涵盖日志级别、核心API、隐私保护与高级回调功能,助你从入门到精通掌握这一重要开发工具。
246 1
|
27天前
|
Ubuntu
在Ubuntu系统上设置syslog日志轮替与大小限制
请注意,在修改任何系统级别配置之前,请务必备份相应得原始档案并理解每项变更可能带来得影响。
94 2
|
3月前
|
存储
WGLOG日志管理系统可以采集网络设备的日志吗
WGLOG日志审计系统提供开放接口,支持外部获取日志内容后发送至该接口,实现日志的存储与分析。详情请访问:https://www.wgstart.com/wglog/docs9.html
|
8月前
|
存储 前端开发 数据可视化
Grafana Loki,轻量级日志系统
本文介绍了基于Grafana、Loki和Alloy构建的轻量级日志系统。Loki是一个由Grafana Labs开发的日志聚合系统,具备高可用性和多租户支持,专注于日志而非指标,通过标签索引而非内容索引实现高效存储。Alloy则是用于收集和转发日志至Loki的强大工具。文章详细描述了系统的架构、组件及其工作流程,并提供了快速搭建指南,包括准备步骤、部署命令及验证方法。此外,还展示了如何使用Grafana查看日志,以及一些基本的LogQL查询示例。最后,作者探讨了Loki架构的独特之处,提出了“巨型单体模块化”的概念,即一个应用既可单体部署也可分布式部署,整体协同实现全部功能。
2663 70
Grafana Loki,轻量级日志系统
|
7月前
|
存储 消息中间件 缓存
MiniMax GenAI 可观测性分析 :基于阿里云 SelectDB 构建 PB 级别日志系统
基于阿里云SelectDB,MiniMax构建了覆盖国内及海外业务的日志可观测中台,总体数据规模超过数PB,日均新增日志写入量达数百TB。系统在P95分位查询场景下的响应时间小于3秒,峰值时刻实现了超过10GB/s的读写吞吐。通过存算分离、高压缩比算法和单副本热缓存等技术手段,MiniMax在优化性能的同时显著降低了建设成本,计算资源用量降低40%,热数据存储用量降低50%,为未来业务的高速发展和技术演进奠定了坚实基础。
287 1
MiniMax GenAI 可观测性分析 :基于阿里云 SelectDB 构建 PB 级别日志系统
|
7月前
|
存储 JSON Go
PHP 日志系统的最佳搭档:一个 Go 写的远程日志收集服务
为了不再 SSH 上去翻日志,我写了个 Go 小脚本,用来接收远程日志。PHP 负责记录日志,Go 负责存储和展示,按天存储、支持 API 访问、可远程管理,终于能第一时间知道项目炸了。
123 10
|
存储 监控 安全
5款 Syslog集中系统日志常用工具对比推荐
集中管理Syslog有助于持续监控网络中的恶意活动,确保日志的搜索和分析更为便捷。常用工具包括Rsyslog、Syslog-ng、Logstash和Fluentd,它们各有优劣。Rsyslog通过多种协议确保日志传输的安全性;Syslog-ng支持高效收集和转发日志;Logstash能解析多源日志并索引;Fluentd将日志转换为JSON格式。卓豪EventLog Analyzer则提供一体化的日志管理,支持日志分析、报表生成、用户行为分析及实时告警,是全面的日志管理解决方案。
|
9月前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
591 8

热门文章

最新文章