河北电子网站建设,西安建设厅网站首页,济南网站备案程序,株洲seo优化官网1.ELK架构是什么
ELK是ElasticsearchLogstashKibana的简称。
Elasticsearch是一个开源的分布式搜索和分析引擎#xff0c;可以用于全文检索、结构化检索和分析#xff0c;它构建在Lucene搜索引擎库之上#xff0c;是当前使用较为广泛的开源搜索引擎之一。
Logstash是一个…1.ELK架构是什么
ELK是ElasticsearchLogstashKibana的简称。
Elasticsearch是一个开源的分布式搜索和分析引擎可以用于全文检索、结构化检索和分析它构建在Lucene搜索引擎库之上是当前使用较为广泛的开源搜索引擎之一。
Logstash是一个开源的数据搜集引擎是一个用来搜集、分析、过滤日志的工具使用它可以将搜集来的日志信息进行处理然后进行输出。Logstash支持许多功能强大的插件可以合理使用这些插件来对搜集到 的日志信息进行过滤和处理。
Kibana是一个基于Web的图形界面可以使用它对Elasticsearch索引中的数据进行搜索、查看、交互操作。还可以很方便的利用图表、表格及地图对数据进行多元化的分析和呈现。
Filebeat是一个轻量级的日志搜集器用于搜集和转发日志数据Filebeat一般都会安装在需要搜集日志的服务器上指定需要搜集日志的日志文件的位置搜集日志信息并转发到Elasticsearch 或Logstash上进行索引。 其中 Filebeat 主要用于在服务器中采集服务日志信息并输出到 Logstash Logstash 负责接收所有 Filebeat 传递过来的日志数据并对数据进行过滤筛选处理后输出到 Elasticsearch Elasticsearch 主要用于日志消息的存储搜索和分析在 Elasticsearch 中存储的索引信息最终会通过 Kibana 在页面上直观的进行展示。最终用户可以在 Kibana 页面中操作索引查询日志 监控 Elasticsearch 和 Kibana 的健康状态以及配置多种 Dashboard 来展示聚合数据信息。
总结来说ELK 日志监控大体上分为两部分Elasticsearch、Logstash 和 Filebeat 负责数据的搜集过滤存储和分析Kibana 负责操作存储在 Elasticsearch 中的索引信息监控 Elasticsearch 和 Kibana 的健康状态以及管理用户信息。 同时用户还可以配置多种 Dashboard 来展示数据聚合信息。
2.为什么采用ELK架构
1Elasticsearch、Logstash、Kibana、Filebeat 均为开源组件并且使用 ELK 搭建日志监控系统的方案也比较成熟。
2一般的日志监控系统架构都是采用 ELKElasticsearch、Logstash、Kibana架构去搭建的但是由于 Logstash 本身是基于 jdk 的且它集成了许多插件所以占用内存较大在每台服务器上都部署一 个 Logstash 有些占用资源因此我们使用轻量级的 Filebeat 组件来完成搜集日志的操作。但是 Filebeat 只能采集日志数据却无法对数据进行过滤因此我们在将日志信息输出到 Elasticsearch 之前先使 用 Logstash 对数据进行过滤处理再将处理好的数据输出到 Elasticsearch。
3在微服务场景下可能存在如下两种情况
开发或生产环境的微服务项目部署在多台服务器上此时需要监控多台服务器下的日志信息情况一台服务器下既存在开发环境的微服务项目又存在生产环境的微服务项目此时需要将搜集到的日志信息加以区分。
这种情况下我们可以在 Filebeat 采集日志时为日志信息指定每个不同环境的唯一前缀后再输出。
3.ElasticSearch8.X源码部署
1什么是ElasticSearch 官网https://www.elastic.co/cn/elasticsearch/
ElasticSearch是⼀个开源是⼀个基于Apache Lucene库构建的Restful搜索引擎. Elasticsearch是在Solr之后⼏年推出的。
它提供了⼀个分布式多租户能⼒的全⽂搜索引擎具有HTTP Web界⾯REST和⽆架构JSON⽂档。
Elasticsearch的官⽅客户端库提供JavaGroovyPHPRubyPerlPython.NET和Javascript。
应⽤场景维基百科、Stack Overflow、GitHub、电商⽹站、⽇志数据分析、商品价格监控⽹站、BI系统、站内搜索2Elasticsearch核心概念
Index索引
ES将数据存储于一个或多个索引中索引是具有类似特性的文档的集合相当于关系型数据库中的一个Database。索引由其名称(必须为全小写字符)进行标识并通过引用此名称完成文档的创建、搜索、更新及删除操作。一个ES集群中可以按需创建任意数目的索引。类型Type
类型是索引内部的逻辑分区在一个索引内部可定义一个或多个类型(type)类似于传统数据库中的表。一般来说类型就是为那些拥有相同的域的文档做的预定义。例如在索引中可以定义一个用于存储用户数据的类型一个存储日志数据的类型以及一个存储评论数据的类型。文档Document
文档是索引和搜索的原子单位它是存储在ES中的一个JSON格式的字符串其中包含了一个或多个域Field的容器。在ES中每个文档都有一个类型和ID每个文档由一个或多个域组成每个域拥有一个名字及一个或多个值有多个值的域通常称为“多值域”。每个文档可以存储不同的域集但同一类型下的文档至应该有某种程度上的相似之处。集群Cluster
集群由一个或多个节点组成对外提供索引和搜索功能。在一个集群中所有的节点都有一个唯一的名称默认为“Elasticsearch”当某个节点被设置为相同的集群名称时会自动加入到集群。如果有多个集群需要设置不同的名称否则节点可能会加入到错误的集群。需要注意的是一个节点只能加入一个集群。节点Node
一个运行中的Elasticsearch实例称为一个节点它是一个逻辑上独立的服务可以存储数据是ES集群的一部分。ES集群由一个或者多个拥有相同cluster.name配置的节点组成它们共同承担数据和负载的压力。ES集群中的节点有三种不同的类型
主节点负责管理集群范围内的所有变更例如增加、删除索引或者增加、删除节点等并决定哪些分片分配给相关的节点、追踪集群中节点的状态等。主节点并不需要涉及到文档级别的变更和搜索等操作可以通过属性node.master进行设置。
数据节点存储数据和其对应的倒排索引同时对数据进行增删改查和聚合等操作。默认每一个节点都是数据节点包括主节点可以通过node.data属性进行设置。通常随着集群的扩大需要增加更多的数据节点来提高性能和可用性。
协调节点如果node.master和node.data属性均为false则此节点称为协调节点用来响应客户请求均衡每个节点的负载。路由Routing
当存储一个文档的时候它会存储在唯一的主分片中具体哪个分片是通过散列值进行选择。默认情况下这个值由文档的ID生成如果文档中指定了一个父文档则从父文档ID中生成。
注Routing值和路由计算具体到哪个分片有关。分片Sharding
ES中的索引数据量太大的时候可以通过水平拆分的方式将一个索引上的数据拆分出来分配到不同的数据块上这个数据块称为分片相当于水平分表。一个分片便是一个Lucene的实例ES中的index就是指向主分片和副本分片的逻辑空间。实际的文档数据被存储和索引到分片内但是应用程序是直接与索引而不是与分片进行交互。主分片:每个文档都存储在一个分片中当存储一个文档的时候ES首先将数据存储在主分片中然后复制到不同的副本中。ES默认为一个索引创建 5 个主分片, 并分别为每个分片创建一个副本通过参数可以指定。在索引建立的时候就已经确定了主分片数但是副本分片数可以随时修改。副本分片:副本分片是主分片的复制每个主分片有0个或者多个副本。当主分片异常的时候可以从副本分片中选择一个作为主分片提高可用性。同时查询可以在副本分片进行减轻主分片的压力提高性能。元数据
Elasticsearch中以 “ _” 开头的属性都成为元数据都有自己特定的意思。3上传安装包和解压
tar -zxvf elasticsearch-8.4.1-linux-x86_64.tar.gz4elasticsearch默认不允许以root账号运行新建一个用户运行es
创建用户useradd es_user
设置密码passwd es_user5修改目录权限
# chmod是更改文件的权限
# chown是改改文件的属主与属组
# chgrp只是更改文件的属组。chgrp -R es_user /usr/local/software/elasticsearch-8.4.1
chown -R es_user /usr/local/software/elasticsearch-8.4.1
chmod -R 777 /usr/local/software/elasticsearch-8.4.16修改文件和进程最大打开数,需要root用户,如果系统本身有这个文件最大打开数和进程最大打开数配置则不用
vi /etc/security/limits.conf* soft nofile 65536
* hard nofile 655367修改虚拟内存空间默认太小
在配置文件中改配置 最后一行上加上执行 sysctl -p(立即生效)
vi /etc/sysctl.conf vm.max_map_count2621458修改elasticsearch的JVM内存机器内存不足常规线上推荐16到24G内存
vi config/jvm.options-Xms1g
-Xmx1g9修改 elasticsearch相关配置
vi config/elasticsearch.ymlcluster.name: my-application
node.name: node-1
path.data: /usr/local/software/elasticsearch-8.4.1/data
path.logs: /usr/local/software/elasticsearch-8.4.1/logs
network.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: [node-1]
xpack.security.enabled: false
xpack.security.enrollment.enabled: false
ingest.geoip.downloader.enabled: false配置说明:
cluster.name: 指定Elasticsearch集群的名称。所有具有相同集群名称的节点将组成一个集群。
node.name: 指定节点的名称。每个节点在集群中应该具有唯一的名称。
path.data: 指定用于存储Elasticsearch索引数据的路径。
path.logs: 指定Elasticsearch日志文件的存储路径。
network.host: 指定节点监听的网络接口地址。0.0.0.0表示监听所有可用的网络接口开启远程访问连接
http.port: 指定节点上的HTTP服务监听的端口号。默认情况下Elasticsearch的HTTP端口是9200。
cluster.initial_master_nodes: 指定在启动集群时作为初始主节点的节点名称。
xpack.security.enabled: 指定是否启用Elasticsearch的安全特性。在这里它被禁用false意味着不使用安全功能。
xpack.security.enrollment.enabled: 指定是否启用Elasticsearch的安全认证和密钥管理特性。在这里它被禁用false。
ingest.geoip.downloader.enabled: 指定是否启用GeoIP数据库下载功能。在这里它被禁用false10启动ElasticSearch切换到es_user用户启动
./elasticsearch 11常见命令访问es的服务状态
#查看集群健康情况
http://ip:9200/_cluster/health#查看分片情况
http://ip:9200/_cat/shards?vtruepretty#查看节点分布情况
http://ip:9200/_cat/nodes?vtruepretty#查看索引列表
http://ip:9200/_cat/indices?vip12部署es常见的问题
磁盘空间需要85%以下不然ES状态会不正常
不要用root用户安装
linux内存不够
linux文件句柄
没开启远程访问 或者 网络安全组没看开放端口
有9300 tcp端口和http 9200端口要区分
没权限访问重新执行目录权限分配4.Kibana8.X源码部署
1什么是Kibana 基于node.js开发数据可视化和仪表盘工具连接到Elasticsearch通过简单易用的用户界面创建各种图表、图形和仪表盘帮助用户快速探索和理解数据并进行强大的数据分析和可视化
2上传安装包和解压
tar -zxvf kibana-8.4.1-linux-x86_64.tar.gz3配置用户权限
chgrp -R es_user /usr/local/software/kibana-8.4.1
chown -R es_user /usr/local/software/kibana-8.4.1
chmod -R 777 /usr/local/software/kibana-8.4.14修改配置文件
vim config/kibana.ymlserver.port: 5601
server.host: 0.0.0.0
elasticsearch.hosts: [http://ip:9200] #es部署机器的IP地址
i18n.locale: zh-CN #汉化server.port: 指定Kibana服务器监听的端口号,Kibana将在5601端口上监听HTTP请求。
server.host: 指定Kibana服务器绑定的网络接口地址, 0.0.0.0表示监听所有可用的网络接口。
elasticsearch.hosts: 指定ES集群的主机地址,可以配置多个,Kibana将连接到位于120.24.7.58主机上、使用默认HTTP端口9200的es
i18n.locale: 指定Kibana界面的语言区域zh-CN表示使用简体中文作为语言。5启动切换到es_user 用户
./kibana 访问192.168.140.100:5601 6开发者工具 5.SpringBoot部署应用
1创建SpringBoot项目编写测试接口
RequestMapping(/log)
public String log(){logService.log();return SUCCESS;
}2配置logback.xml文件
?xml version1.0 encodingUTF-8?
configurationproperty nameLOG_HOME value./logs /!--采用打印到控制台记录日志的方式--appender nameconsole classch.qos.logback.core.ConsoleAppenderencoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n/pattern/encoder/appender!-- 采用保存到日志文件 记录日志的方式%d{yyyy-MM-dd HH:mm:ss.SSS}输出日志发生的时间精确到毫秒。[%thread]输出日志所在的线程名。%-5level输出日志级别使用占位符%5level可以保持日志级别的对齐。%logger{36}输出日志所在的类名只输出类名的后36个字符。%msg输出日志消息。%n新行。--appender namerollingFile classch.qos.logback.core.rolling.RollingFileAppenderfile${LOG_HOME}/order.log/filerollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicyfileNamePattern${LOG_HOME}/order-%d{yyyy-MM-dd}.log/fileNamePattern/rollingPolicyencoderpattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n/pattern/encoder/appender!-- 指定某个类单独打印日志 --logger namecom.lixiang.service.impl.LogServiceImpllevelINFO additivityfalseappender-ref refrollingFile /appender-ref refconsole //loggerroot levelINFO additivityfalseappender-ref refrollingFile //root
/configuration3打包部署服务器
ps -ef | grep order-service-1.0.jar | grep -v grep | awk {print $2} | xargs kill -9
nohup java -Xms512m -Xmx512m -jar /usr/local/order/order-service-1.0.jar order.log 21 6.LogStash8.X源码部署
1什么是Logstash
Logstash是一个用于数据收集、转换和传输的数据处理引擎支持从各种来源如文件、日志、数据库等收集数据。基于java开发并对数据进行结构化、过滤和转换然后将数据发送到Elasticsearch等目标存储或分析系统。常见的数据采集流程 Logstash 采集 – Elasticsearch – KibanaBeats 采集Filebeat/Metricbeat– Elasticsearch – KibanaBeats 采集Filebeat/Metricbeat– Logstash – Elasticsearch – Kibana
2LogStash宏观配置文件组成 3上传安装包和解压
tar -zxvf logstash-8.4.1-linux-x86_64.tar.gz4修改配置文件
JVM内存不够的话修改 config/jvm.options创建新配置文件 touch config/test-logstash.conf
input {file {path /usr/local/order/logs/order.logstart_position beginningstat_interval 3type order-service-log}
}output {if [type] order-service-log {elasticsearch {hosts [http://192.168.140.100:9200]index order-service-%{YYYY.MM.dd}}}
}input指定Logstash接收数据的输入插件使用file插件作为输入。file插件用于读取并处理文件中的数据。
file指定使用的输入插件是file插件。
path指定要读取的文件路径Logstash会读取位于/usr/local/software/log/access.log路径下的文件。
start_position指定从文件的哪个位置开始读取数据。设置为beginning表示从文件的开始位置开始读取数据。
stat_interval指定文件的状态检查间隔以秒为单位。设置为3表示每隔3秒检查一次文件状态以判断是否有新数据。
type指定数据的类型名称。设置为nginx-access-log表示数据的类型是Nginx访问日志。
output指定Logstash处理完数据后的输出插件。使用elasticsearch插件将处理后的日志数据发送到Elasticsearch。
elasticsearch指定使用的输出插件是elasticsearch插件。
hosts指定Elasticsearch集群的主机地址。Logstash将处理后的数据发送到位于192.168.140.100主机上HTTP端口9200的ES节点
index指定数据在Elasticsearch中的索引名称比如【 filebeat-8.4.1-2023.07.02 】使用[metadata][beat]字段、[metadata][version]字段和当前日期来构建索引名称可以根据采集数据的来源和版本动态创建索引。5启动进入bin目录
./logstash -f /usr/local/software/logstash-8.4.1/config/test-logstash.conf 6访问kibana查看索引管理