潍坊响应式网站建设,网站建设阿华seo,邯郸网页,辽宁自助网站建设公司ELK日志分析
一、ELK概述
1、ELK简介
ELK平台是一套完整的日志集中处理解决方案#xff0c;将ElasticSearch、Logstash和Kiabana三个开源工具配合使用#xff0c;完成更强大的用户对日志的查询、排序、统计需求。 一个完整的集中式日志系统#xff0c;需要包含以下几个主…ELK日志分析
一、ELK概述
1、ELK简介
ELK平台是一套完整的日志集中处理解决方案将ElasticSearch、Logstash和Kiabana三个开源工具配合使用完成更强大的用户对日志的查询、排序、统计需求。 一个完整的集中式日志系统需要包含以下几个主要特点
收集能够采集多种来源的日志数据传输能够稳定的把日志数据传输到中央系统存储如何存储日志数据分析可以支持 UI 分析警告能够提供错误报告监控机制
tip linux时间同步
安装工具
yum -y install ntp ntpdate
同步网络时间
ntpdate cn.pool.ntp.org2、ELK组成
1ElasticSearch
• 是基于Lucene一个全文检索引擎的架构开发的分布式存储检索引擎用来存储各类日志
• Elasticsearch是用Java开发的可通过RESTful Web接口让用户可以通过浏览器与Elasticsearch通信
• Elasticsearch是个分布式搜索和分析引擎优点是能对大容量的数据进行接近实时的存储、搜索和分析操作
• Elasticsearch可以划分为三种主节点、数据节点和客户端节点 1、master主节点 elasticsearch.yml: node.master:true node.data:false 主要功能维护元数据管理集群节点状态不负责数据写入和查询 配置要点内存可以相对小一些但是机器一定要稳定最好是独占的机器 2、data数据节点 elasticsearch.yml: node.master:false node.data:true 主要功能负责数据的写入与查询压力大 配置要点大内存最好是独占的机器 3、client客户端节点 elasticsearch.yml: node.master:true node.data:true 主要功能综合上述三个节点的功能。 配置要点大内存最好是独占的机器。 特别说明不建议这种配置节点容易挂掉 4、一般配置主节点3台服务器数据节点与客户端节点配置比例一般在3:1左右根据实际情况调节 2Logstash
• 作为数据收集引擎。它支持动态的从各种数据源搜集数据并对数据进行过滤、分析、丰富、统一格式等操作然后存储到用户指定的位置一般会发送给Elasticsearch
• Logstash由JRuby语言编写运行在Java虚拟机JVM上是一款强大的数据处理工具可以实现数据传输、格式处理、格式化输出。Logstash具有强大的插件功能常用于日志处理
3Kibana
是基于Node.js开发的展示工具可以为Logstash和ElasticSearch提供图形化的日志分析Web界面展示可以汇总、分析和搜索重要数据日志
4Filebeat
轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装 Filebeat并指定目录与日志格式Filebeat就能快速收集数据并发送给logstash进行解析或是直接发给Elasticsearch存储性能上相比运行于JVM上的loqstash优势明显是对它的替代
3、为什么要使用ELK
1日志主要包括-系统日志应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及。错误发生的原因。经常分析日志可以了解服务器的负荷性能安全性从而及时采取措施纠正错误。 2往往单台机器的日志我们使用grep、awk等工具就能基本实现简单析但是当日志被分散的储存不同的设备上。如果你管理数十上百台服务器你还在使用依次登录每台机器的传统方法查阅日志。这样感觉很繁琐和效率低下。 3当务之急我们使用集中化的日志管理例如∶开源的syslog将所有服务器上的日志收集汇总。集中化管理日志后日志的统计和检索又成为一件比较麻烦的事情一般我们使用grep、awk和wc等Linux命令能实现检索和统计但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。 4一般大型系统是一个分布式部署的架构不同的服务模块部署在不同的服务器上问题出现时大部分情况需要根据问题暴露的关键信息定位到具体的服务器和服务模块构建一套集中式日志系统可以提高定位问题的效率。
4.ELK的主要特点
存储面向文档JSON 1面向文档
Elasticsearch是面向文档(document oriented)的这意味着它可以存储整个对象或文档(document)。然而它不仅仅是存储还会索引(index)每个文档的内容使之可以被搜索。在Elasticsearch中你可以对文档而非成行成列的数据进行索引、搜索、排序、过滤。这种理解数据的方式与以往完全不同这也是Elasticsearch能够执行复杂的全文搜索的原因之一。
2JSON
ELasticsearch使用Javascript对象符号(JavaScript Object Notation)也就是JSON作为文档序列化格式。JSON现在已经被大多语言所支持而且已经成为NoSQL领域的标准格式。它简洁、简单且容易阅读。尽管原始的user对象很复杂但它的结构和对象的含义已经被完整的体现在JSON中了在Elasticsearch中将对象转化为JSON并做索引要比在表结构中做相同的事情简单的多。传统数据库有表名.字段.,属性 然后对应下面行为数据,但是在es中不区分,统一将一行数据转换为json格式进行存储,所以es中存储非格式化的方式。
以下是一个表示嵌套JSON的示例
{person: {name: John,age: 30,address: {street: 123 Main St,city: New York,state: NY,zipcode: 10001},phone_numbers: [{type: home,number: 555-1234},{type: work,number: 555-5678}]}
}在上面的示例中“person是一个对象它包含了name”、“age”、address和phone_numbers四个属性。其中“address是一个对象它包含了street”、“city”、state和zipcode四个属性。phone_numbers是一个数组它包含了两个元素每个元素是一个对象包含了type和number两个属性。
检索倒排乐观锁(了解) 1倒排
倒排是一种索引方法用来存储在全文检索下某个单词在一个/组文档中的存储位置也常被称为反向索引、置入档案或反向档案。也是ES为何具有高检索性能的原因。
一般的正向索引
一般的正向索引要搜索某个单词是遍历文档检查文档中是否有这个单词。
文档1[单词1单词2]
文档2[单词1单词2单词3]
倒排索引
而倒排索引是建立一个映射关系确定单词属于哪几个文档
单词1[文档1文档2]
单词2[文档1文档2文档3]
ES中采用的就是倒排索引结构。
2冲突处理和修改操作
ES采用乐观锁处理冲突乐观锁概念参考Elasticsearch-并发冲突处理机制因此在执行一些操作时可能要进行多次操作才可以完成并且ES的修改操作有以下方面有几个特性
修改
文档不能被修改只能被替换
删除 文档删除操作只是标记为”已删除“并没有真正释放内存 尽管不能再对旧版本的文档进行访问但它并不会立即消失 当继续索引更多的数据Elasticsearch 会在后台清理这些已删除文档 删除索引会直接释放内存
分析监控预警可视化 ELK将所有节点上的日志统一收集传输存储管理访问分析警告可视化。
它提供了大量应用于监控的可视化界面例如Uptime、Metric、Machine Learning、DashBoard、Stack Monitoring都是我们将系统/服务器/应用的数据传入ES后就可以利用Kibana的模板来展示相关内容。
对于各种常见的采集器采集到的数据官方提供了一系列对应的模板但是我们也可以针对自己的数据自定义来按需求展示想要的信息。
关于各个板块的具体展示内容和查看方式在后文具体提到见三、Beats和四、Kibana插件。
支持集群
集群真正的扩容能力是来自于水平扩容–为集群添加更多的节点并且将负载压力和稳定性分散到这些节点中。
1ES集群特点
一个集群拥有相同的cluster.name 配置的节点组成 它们共同承担数据和负载的压力
主节点负责管理集群的变更例如增加、删除索引或者增加、删除节点等。 而主节点并不需要涉及到文档级别的变更和搜索等操作
2分片的特点
Elasticsearch 是利用分片将数据分发到集群内各处
分片是数据的容器文档保存在分片内
分片又被分配到集群内的各个节点里
当集群规模变动ES会自动在各个节点中迁移分片。使得数据仍然均匀分布在集群中
副分片是主分片的一个拷贝作为硬件故障时的备份。并提供返回文档读操作
在创建索引时确定主分片数但是副分片可以在后面进行更改
5.ELK工作原理
在所有需要收集日志的服务器上部署Logstash或者先将日志进行集中化管理在日志服务器上在日志服务器上部署 Logstash。Logstash 收集日志将日志格式化并输出到 Elasticsearch 群集中。Elasticsearch 对格式化后的数据进行索引和存储。Kibana 从 ES 群集中查询数据生成图表并进行前端数据的展示。
总结logstash作为日志搜集器从数据源采集数据并对数据进行过滤格式化处理然后交由Elasticsearch存储kibana对日志进行可视化处理
ElasticSearch工作原理
ElasticSearch(简称ES)是一个基于Lucene构建的开源、分布式、RESTful的全文本搜索引擎。
不过ElasticSearch却也不仅只是一个全文本搜索引擎它还是一个分布式实时文档存储其中每个field均是被索引的数据且可被搜索也是一个带实时分析功能的分布式搜索引擎并且能够扩展至数以百计的服务器存储及处理PB级的数据。
如前所述ElasticSearch在底层利用Lucene完成其索引功能因此其许多基本概念源于Lucene。
说说ES的基本概念。
索引(Index)
ES将数据存储于一个或多个索引中索引是具有类似特性的文档的集合。类比传统的关系型数据库领域来说索引相当于SQL中的一个数据库或者一个数据存储方案(schema)。
索引由其名称(必须为全小写字符)进行标识并通过引用此名称完成文档的创建、搜索、更新及删除操作。一个ES集群中可以按需创建任意数目的索引。
类型(Type)
类型是索引内部的逻辑分区(category/partition)然而其意义完全取决于用户需求。因此一个索引内部可定义一个或多个类型(type)。一般来说类型就是为那些拥有相同的域的文档做的预定义。
例如在索引中可以定义一个用于存储用户数据的类型一个存储日志数据的类型以及一个存储评论数据的类型。类比传统的关系型数据库领域来说类型相当于“表”。
文档(Document)
文档是Lucene索引和搜索的原子单位它是包含了一个或多个域的容器基于JSON格式进行表示。
文档由一个或多个域组成每个域拥有一个名字及一个或多个值有多个值的域通常称为“多值域”。每个文档可以存储不同的域集但同一类型下的文档至应该有某种程度上的相似之处。
映射(Mapping)
ES中所有的文档在存储之前都要首先进行分析。用户可根据需要定义如何将文本分割成token、哪些token应该被过滤掉以及哪些文本需要进行额外处理等等。
另外ES还提供了额外功能例如将域中的内容按需排序。事实上ES也能自动根据其值确定域的类型。
接下去再说说ES Cluster相关的一些概念。
集群(Cluster)
ES集群是一个或多个节点的集合它们共同存储了整个数据集并提供了联合索引以及可跨所有节点的搜索能力。
多节点组成的集群拥有冗余能力它可以在一个或几个节点出现故障时保证服务的整体可用性。
集群靠其独有的名称进行标识默认名称为“elasticsearch”。节点靠其集群名称来决定加入哪个ES集群一个节点只能属一个集群。
如果不考虑冗余能力等特性仅有一个节点的ES集群一样可以实现所有的存储及搜索功能。
节点(Node)
运行了单个实例的ES主机称为节点它是集群的一个成员可以存储数据、参与集群索引及搜索操作。
类似于集群节点靠其名称进行标识默认为启动时自动生成的随机Marvel字符名称。
用户可以按需要自定义任何希望使用的名称但出于管理的目的此名称应该尽可能有较好的识别性。
节点通过为其配置的ES集群名称确定其所要加入的集群。
分片(Shard)和副本(Replica)
ES的“分片(shard)”机制可将一个索引内部的数据分布地存储于多个节点它通过将一个索引切分为多个底层物理的Lucene索引完成索引数据的分割存储功能这每一个物理的Lucene索引称为一个分片(shard)。
每个分片其内部都是一个全功能且独立的索引因此可由集群中的任何主机存储。创建索引时用户可指定其分片的数量默认数量为5个。
Shard有两种类型primary和replica即主shard及副本shard。 Primary shard用于文档存储每个新的索引会自动创建5个Primary shard当然此数量可在索引创建之前通过配置自行定义不过一旦创建完成其Primary shard的数量将不可更改。 Replica shard是Primary Shard的副本用于冗余数据及提高搜索性能。
每个Primary shard默认配置了一个Replica shard但也可以配置多个且其数量可动态更改。ES会根据需要自动增加或减少这些Replica shard的数量。
ES集群可由多个节点组成各Shard分布式地存储于这些节点上。
ES可自动在节点间按需要移动shard例如增加节点或节点故障时。简而言之分片实现了集群的分布式存储而副本实现了其分布式处理及冗余功能。
下面说说ES系统及插件。
ES依赖于JDK使用Oracke JDK或OpenJDK均可。
JDK在不同平台的安装方式各异具体方法这里不再介绍。ES的安装也非常容易通常只需要简单修改其配置文件中的集群名称并启动服务即可这里不再赘述。
ElasticSearch在设计上支持插件式体系结构用户可根据需要通过插件来增强ElasticSearch的功能。
目前常用的通过插件扩展的功能包括添加自定义映射类型、自定义分析器、本地脚本、自定义发现方式等等。
安装及移除插件
插件的安装有两种方式直接将插件放置于plugins目录中或通过plugin脚本进行安装。
Marvel、BigDesk及Head这三个是较为常用的插件。
ElasticSearch提供了易用但功能强大的RESTful API以用于与集群进行交互这些API大体可分为如下四类
(1) 检查集群、节点、索引等健康与否以及获取其相关状态与统计信息 (2) 管理集群、节点、索引数据及元数据 (3) 执行CRUD操作及搜索操作 (4) 执行高级搜索操作例如paging、filtering、scripting、faceting、aggregations及其它操作
Logstash原理
Logstash的理念很简单它只做3件事情Collect:数据输入(收集)Enrich:数据加工如过滤,改写等Transport:数据输出(被其他模块进行调用)
Logstash 配置文件基本由三部分组成Input、Output、Filter Plugin
Input获取日志表示从数据源采集数据常见的数据源如Kafka、日志文件等Output输出日志表示将Logstash收集的数据经由过滤器处理之后输出到ElasticsearchFilter Plugin过滤日志、格式处理表示数据处理层包括对数据进行格式化处理、数据类型转换、数据过滤等支持正则表达式 Logstash主要组件 1Shipper日志收集者日志收集负责监控本地日志文件的变化及时把日志文件的最新内容收 集起来。通常远程代理端agent只需要运行这个组件即可。 2Indexer日志存储者日志存储负责接受日志并写入到本地文件。 3Broker日志Hub日志hub负责链接多个shipper和对应数目的indexer。 4Search and Storage允许对事件进行搜索和存储。 5Web Interface基于web的展示界面。 以上组件在Logstash架构中可以独立部署因此提供了很好的集群扩展性
LogStash主机分类
代理主机(agent host)作为事件的传递者shipper)将各种日志数据发送至中心主机;只需运行Logstash代理( agent程序;中心主机(central host)可运行包括中间转发器(Broker)、索引器(Indexer)、搜索和存储器(Searchandstorage)web界面端(web Interface)在内的各个组件以实现对日志数据的接收,处理和存储
其它组件 Filebeat轻量级的开源日志文件数据搜集器。通常在需要采集数据的客户端安装 Filebeat并指定目录与日志格式Filebeat 就能快速收集数据并发送给 logstash 进行解析或是直接发给 Elasticsearch存储性能上相比运行于 JVM 上的 logstash 优势明显是对它的替代。常应用于 EFLK 架构当中。
filebeat 结合 logstash 带来好处 1通过 Logstash 具有基于磁盘的自适应缓冲系统该系统将吸收传入的吞吐量从而减轻Elasticsearch 持续写入数据的压力 2从其他数据源例如数据库S3对象存储或消息传递队列中提取 3将数据发送到多个目的地例如S3HDFSHadoop分布式文件系统或写入文件 4使用条件数据流逻辑组成更复杂的处理管道
缓存/消息队列redis、kafka、RabbitMQ等可以对高并发日志数据进行流量削峰和缓冲这样的缓冲可以一定程度的保护数据不丢失还可以对整个架构进行应用解耦。
Fluentd是一个流行的开源数据收集器。由于 logstash 太重量级的缺点Logstash 性能低、资源消耗比较多等问题随后就有 Fluentd 的出现。 相比较 logstashFluentd 更易用、资源消耗更少、性能更高在数据处理上更高效可靠受到企业迎成为 logstash 的一种替代方案常应用于 EFK 架构当中。在 Kubernetes 集群中也常使用 EFK 作为日志数据收集的方案。 在 Kubernetes 集群中一般是通过 DaemonSet 来运行 Fluentd以便它在每个 Kubernetes 工作节点上都可以运行一个 Pod。 它通过获取容器日志文件、过滤和转换日志数据然后将数据传递到Elasticsearch 集群在该集群中对其进行索引和存储。
Kibana展示
1一个针对Elasticsearch的开源分析及可视化平台 2搜索、查看存储在Elasticsearch索引中的数据 3通过各种图标进行高级数据分析及展示 4让海量数据更容易理解 5操作简单基于浏览器地用户界面就可以快速创建仪表板dashboard实时显示Elasticsearch查询动态 6设置安装Kibana非常简单无需编写代码几分钟内就可以完成Kibana安装并启动Elasticsearch监测。
Kibana主要功能 Kibana 通常与 Elasticsearch 一起部署Kibana 是 Elasticsearch 的一个功能强大的数据可视化DashboardKibana 提供图形化的 web 界面来浏览 Elasticsearch 日志数据可以用来汇总、分析和搜索重要数据。
1Elasticsearch无缝之集成。Kibana架构为Elasticsearch定制可以将任何结构化和非结构化数据加入Elasticsearch索引。Kibana还充分利用了Elasticsearch强大的搜索和分析功能。 2整合数据Kibana能够更好地处理海量数据并据此创建柱形图、折线图、散点图、直方图、饼图和地图。 3复杂数据分析Kibana提升了Elasticsearch分析能力能够更加智能地分析数据执行数学转换并且根据要求对数据切割分块。 4让更多团队成员受益强大的数据库可视化接口让各业务岗位都能够从数据集合受益。 5接口灵活分享更容易使用Kibana可以更加方便地创建、保存、分享数据并将可视化数据快速交流。 6配置简单Kibana的配置和启用非常简单用户体验非常友好。Kibana自带Web服务器可以快速启动运行。 7可视化多数据源Kibana可以非常方便地把来自Logstash、ES-Hadoop、Beats或第三方技术的数据整合到Elasticsearch支持的第三方技术包括Apache Flume、Fluentd等。 8简单数据导出Kibana可以方便地导出感兴趣的数据与其它数据集合并融合后快速建模分析发现新结果。
二、ELK Elasticsearch 集群部署在Node1、Node2节点上操作
准备
Node1节点2C/4Gnode1/192.168.99.111 Elasticsearch Node2节点2C/4Gnode2/192.168.99.122 Elasticsearch Elasticsearch-head Apache节点apache 192.168.99.143 Logstash Apache Kibana Filebeat节点192.168.99.161
所有节点关闭系统防火墙和安全机制
systemctl stop firewalld
systemctl disable firewalld
setenforce 0更改主机名
Node1节点hostnamectl set-hostname n1 Node2节点hostnamectl set-hostname n2
#查看Java环境如果没有安装yum -y install java
java -version部署 Elasticsearch 软件
安装elasticsearch—rpm包
cd /opt
rpm -ivh elasticsearch-5.5.0.rpm加载系统服务
systemctl daemon-reload
systemctl enable elasticsearch.service修改elasticsearch主配置文件
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
# 修改时属性名和属性值之间需要有空格间隔
vim /etc/elasticsearch/elasticsearch.yml
--17--取消注释指定集群名字
cluster.name: my-elk-cluster
--23--取消注释指定节点名字Node1节点为node1Node2节点为node2
node.name: node1
--33--取消注释指定数据存放路径
path.data: /data/elk_data
--37--取消注释指定日志存放路径
path.logs: /var/log/elasticsearch/
--43--取消注释改为在启动的时候不锁定内存
bootstrap.memory_lock: false
--55--取消注释设置监听地址0.0.0.0代表所有地址
network.host: 0.0.0.0
--59--取消注释ES 服务的默认监听端口为9200
http.port: 9200
--68--取消注释集群发现通过单播实现指定要发现的节点 主机名 n1、n2
discovery.zen.ping.unicast.hosts: [n1, n2]
#查看主配置文件
grep -v ^# /etc/elasticsearch/elasticsearch.yml创建数据存放路径并授权
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/启动elasticsearch是否成功开启
systemctl restart elasticsearch.service
netstat -antp | grep 9200查看节点信息
浏览器访问 查看节点 Node1、Node2 的信息 http://192.168.99.111:9200 http://192.168.99.122:9200
浏览器访问 http://192.168.99.111:9200/_cluster/health?pretty http://192.168.99.122:9200/_cluster/health?pretty 查看群集的健康情况 可以看到 status 值为 green绿色 表示节点健康运行。
安装 Elasticsearch-head 插件
Elasticsearch 在 5.0 版本后Elasticsearch-head 插件需要作为独立服务进行安装需要使用npm工具NodeJS的包管理工具安装。
安装 Elasticsearch-head 需要提前安装好依赖软件 node 和 phantomjs。
node是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
phantomjs是一个基于 webkit 的JavaScriptAPI可以理解为一个隐形的浏览器任何基于 webkit 浏览器做的事情它都可以做到。
选择一台es设备安装
编译安装 node
上传软件包 node-v8.2.1.tar.gz 到/opt
yum install gcc gcc-c make -y
cd /opt
tar zxf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make -j4 make install安装 phantomjs
#上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到
yum install -y bzip2
cd /opt
tar jxf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin安装 Elasticsearch-head 数据可视化工具
#上传软件包 elasticsearch-head.tar.gz 到/opt
cd /opt
tar zxf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head/
npm install修改 Elasticsearch 主配置文件(这边展示node1的node2与之相同)
vim /etc/elasticsearch/elasticsearch.yml
......
--末尾添加以下内容--
http.cors.enabled: true #开启跨域访问支持默认为 false
http.cors.allow-origin: * #指定跨域访问允许的域名地址为所有
systemctl restart elasticsearch启动 elasticsearch-head 服务
#必须在解压后的 elasticsearch-head 目录下启动服务进程会读取该目录下的 gruntfile.js 文件否则可能启动失败。
cd /usr/local/src/elasticsearch-head/
npm run start elasticsearch-head0.0.0 start /usr/local/src/elasticsearch-headgrunt server
Running connect:server (connect) task
Waiting forever...
Started connect web server on http://localhost:9100
elasticsearch-head #监听的端口是 9100
netstat -natp |grep 9100浏览器访问192.168.99.122:9100 插入索引
curl -X PUT localhost:9200/index-demo777/test/1?prettypretty -H content-Type: application/json -d {user:xcz,mesg:hello world}ELK Logstash 部署在 Apache 节点上操作
安装Logstash
1#修改主机名
hostnamectl set-hostname apache
su
2#安装httpd并启动
yum -y install httpd
systemctl start httpd
3#安装java环境
yum -y install java
java -version
4#安装logstash
cd /opt
rpm -ivh logstash-5.5.1.rpm
systemctl start logstash.service
systemctl enable logstash.service
cd /usr/share/logstash/
ls
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/测试 LogstashApache与elasticsearchnode功能是否正常做对接
Logstash这个命令测试
字段描述解释
● -f 通过这个选项可以指定logstash的配置文件根据配置文件配置logstash
● -e 后面跟着字符串 该字符串可以被当做logstash的配置如果是“空”则默认使用stdin做为输入、stdout作为输出
● -t 测试配置文件是否正确然后退出
logstash -f 配置文件名字 去连接elasticsearch
1#输入采用标准输入 输出采用标准输出---登录192.168.99.111 在Apache服务器上
logstash -e input { stdin{ } } output { stdout{ } }2、#使用 rubydebug 输出详细格式显示codec 为一种编解码器
logstash -e input { stdin{} } output { stdout{ codecrubydebug } }3、#使用 Logstash 将信息写入 Elasticsearch 中
logstash -e input { stdin{} } output { elasticsearch { hosts[192.168.99.111:9200] } }# 输入 输出 对接
......
isml.moe
#键入内容标准输入
www.bilibili.com
#键入内容标准输入
www.bing.cn
#键入内容标准输入//结果不在标准输出显示而是发送至 Elasticsearch 中可浏览器访问 http://192.168.99.111:9100/ 查看索引信息和数据浏览。定义 logstash配置文件
Logstash 配置文件基本由三部分组成input、output 以及 filter可选根据需要选择使用。**input**表示从数据源采集数据常见的数据源如Kafka、日志文件等**filter**表示数据处理层包括对数据进行格式化处理、数据类型转换、数据过滤等支持正则表达式**output**表示将Logstash收集的数据经由过滤器处理之后输出到Elasticsearch。
#格式如下
input {...}
filter {...}
output {...}#在每个部分中也可以指定多个访问方式。例如若要指定两个日志来源文件则格式如下
input {file { path /var/log/messages type syslog}file { path /var/log/httpd/access.log type apache}
}例如
vim /etc/logstash/conf.d/system.conf
input {file{path /var/log/messages #指定要收集的日志的位置type system #自定义日志类型标识start_position beginning #表示从开始处收集}
}
output {elasticsearch { #输出到 elasticsearchhosts [192.168.99.111:9200] #指定 elasticsearch 服务器的地址和端口index system-%{YYYY.MM.dd} #指定输出到 elasticsearch 的索引格式}
}systemctl restart logstash浏览器访问 http://192.168.99.122:9100/ 查看索引信息修改 Logstash 配置文件让其收集系统日志/var/log/messages并将其输出到 elasticsearch中。 1给日志目录可读权限
chmod r /var/log/messages
#让 Logstash 可以读取日志2修改 Logstash 配置文件
vim /etc/logstash/conf.d/system.confinput {file{path /var/log/messagestype systemstart_position beginning}
}
output {elasticsearch {hosts [192.168.99.111:9200]index system-%{YYYY.MM.dd}}
}systemctl restart logstashELK Kibana 部署192.168.99.143
安装 Kibana
#上传软件包 kibana-5.5.1-x86_64.rpm 到/opt目录
cd /opt
rpm -ivh kibana-5.5.1-x86_64.rpm设置 Kibana 的主配置文件
vim /etc/kibana/kibana.yml
--2--取消注释Kiabana 服务的默认监听端口为5601
server.port: 5601
--7--取消注释设置 Kiabana 的监听地址0.0.0.0代表所有地址
server.host: 0.0.0.0
--21--取消注释设置和 Elasticsearch 建立连接的地址和端口
elasticsearch.url: http://192.168.99.111:9200
--30--取消注释设置在 elasticsearch 中添加.kibana索引
kibana.index: .kibana启动 Kibana 服务
systemctl start kibana.service
systemctl enable kibana.service
netstat -natp | grep 5601浏览器访问http://192.168.99.143:5601/ 第一次登录需要添加一个 Elasticsearch 索引 Index name or pattern //输入system-* #在索引名中输入之前配置的 Output 前缀“system”
单击 “create” 按钮创建单击 “Discover” 按钮可查看图表信息及日志信息。 数据展示可以分类显示在“Available Fields”中的“host”然后单击 “add”按钮可以看到按照“host”筛选后的结果
将 Apache 服务器的日志访问的、错误的添加到 Elasticsearch 并通过 Kibana 显示
vim /etc/logstash/conf.d/apache_log.conf
input {file{path /etc/httpd/logs/access_logtype accessstart_position beginning}file{path /etc/httpd/logs/error_logtype errorstart_position beginning}
}
output {if [type] access {elasticsearch {hosts [192.168.99.111:9200]index apache_access-%{YYYY.MM.dd}}}if [type] error {elasticsearch {hosts [192.168.99.111:9200]index apache_error-%{YYYY.MM.dd}}}
}cd /etc/logstash/conf.d/
/usr/share/logstash/bin/logstash -f apache_log.conf --path.data /var/lib/logstash/data_instance3浏览器访问 http://192.168.99.122:9100 查看索引是否创建浏览器访问 http://192.168.99.143:5601 登录 Kibana单击“Create Index Pattern”按钮添加索引 在索引名中输入之前配置的 Output 前缀 apache_access-*并单击“Create”按钮。在用相同的方法添加 apache_error-*索引。
选择“Discover”选项卡在中间下拉列表中选择刚添加的 apache_access-* 、apache_error-* 索引 可以查看相应的图表及日志信息。 将 nginx 服务器的日志添加到 Elasticsearch 并通过 Kibana 显示
chmod r /var/log/nginxvim /etc/logstash/conf.d/nginx_log.confinput {file{path /var/log/nginx/access.logtype accessstart_position beginning}file{path /var/log/nginx/error.log-%{YYYY.MM.dd}type errorstart_position beginning}
}
output {if [type] access {elasticsearch {hosts [192.168.99.111:9200]index nginx_access-%{YYYY.MM.dd}}}if [type] error {elasticsearch {hosts [192.168.99.111:9200]index nginx_error-%{YYYY.MM.dd}}}
}
cd /etc/logstash/conf.d/
/usr/share/logstash/bin/logstash -f nginx_log.conf --path.data /var/lib/logstash/data_instance_nginx浏览器访问 http://192.168.99.122:9100 查看索引是否创建
浏览器访问 http://192.168.99.143:5601 登录 Kibana单击“Create Index Pattern”按钮添加索引 在索引名中输入之前配置的 Output 前缀 nginx_access-并单击“Create”按钮。在用相同的方法添加 nginx_error-索引。 选择“Discover”选项卡在中间下拉列表中选择刚添加的 nginx_access- 、 nginx_error- 索引 可以查看相应的图表及日志信息。
将 tomcat 服务器的日志添加到 Elasticsearch 并通过 Kibana 显示
在测试前不要忘了修改tomcat日志格式使其支持JSON格式 Tomcat安装完成后我们打开Tomcat的配置文件/usr/local/tomcat/conf/server.xml找到日志配置部分将其pattern修改为如下内容
{clientip:%h,ClientUser:%l,authenticated:%u,AccessTime:%t,method:%r,status:%s,SendBytes:%b,Query?string:%q,partner:%{Referer}i,AgentVersion:%{User-Agent}i}chmod r /usr/local/tomcat/apache-tomcat-9.0.78/logs/
vim /etc/logstash/conf.d/tomcat_log.conf
input {file{path /usr/local/tomcat/apache-tomcat-9.0.78/logs/catalina.2024-06-16.logtype catalinastart_position beginning}file{path /usr/local/tomcat/apache-tomcat-9.0.78/logs/host-manager.2024-06-16.logtype host-managerstart_position beginning}file{path /usr/local/tomcat/apache-tomcat-9.0.78/logs/localhost.2024-06-16.logtype localhoststart_position beginning}file{path /usr/local/tomcat/apache-tomcat-9.0.78/logs/maneger.2024-06-16.logtype managerstart_position beginning}
}
output {if [type] catalina {elasticsearch {hosts [192.168.99.111:9200]index tomcat_catalina-%{YYYY.MM.dd}}}if [type] host-manage {elasticsearch {hosts [192.168.99.111:9200]index tomcat_host-manage-%{YYYY.MM.dd}}}if [type] localhost {elasticsearch {hosts [192.168.99.111:9200]index tomcat_localhost-%{YYYY.MM.dd}}}if [type] manager {elasticsearch {hosts [192.168.99.111:9200]index tomcat_manager-%{YYYY.MM.dd}}}
}
cd /etc/logstash/conf.d/
/usr/share/logstash/bin/logstash -f tomcat_log.conf --path.data /var/lib/logstash/data_instance_tomcat或者
input {file{path /usr/local/tomcat/apache-tomcat-9.0.78/logs/*.logtype tomcatstart_position beginning}
}
output {if [type] tomcat {elasticsearch {hosts [192.168.99.111:9200]index tomcat2-%{YYYY.MM.dd}}}
} 将 MySQL 服务器的日志添加到 Elasticsearch 并通过 Kibana 显示
安装mysql
wget https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm --no-check-certificaterpm -ivh mysql57-community-release-el7-11.noarch.rpmcd /etc/yum.repos.d/sed -i s/gpgcheck1/gpgcheck0/ mysql-community.repoyum -y install mysql-serversystemctl start mysqld.servicesystemctl enable mysqld.servicegrep password /var/log/mysqld.loggrep password /var/log/mysqld.log | awk {print $NF}my.cnf
log-errormysql_error.log
slow_query_logON
slow_query_log_filemysql_slow_query.log
long_query_time2chmod r /var/log/mysqld.log
chmod r /var/lib/mysql
vim /etc/logstash/conf.d/mysql_log.conf
input {file{path /var/log/mysqld.logtype mysqldstart_position beginning}file{path /var/lib/mysql/mysql_error.logtype mysql_errorstart_position beginning}file{path /var/lib/mysql/mysql_slow_query.logtype mysql_slow_querystart_position beginning}
}
output {if [type] mysqld {elasticsearch {hosts [192.168.99.111:9200]index mysqld-%{YYYY.MM.dd}}}if [type] mysql_error {elasticsearch {hosts [192.168.99.111:9200]index mysql_error-%{YYYY.MM.dd}}}if [type] mysql_slow_query {elasticsearch {hosts [192.168.99.111:9200]index mysql_slow_query-%{YYYY.MM.dd}}}
}cd /etc/logstash/conf.d
/usr/share/logstash/bin/logstash -f mysql_log.conf --path.data /var/lib/logstash/data_instance_mysqlFilebeatELK 部署
Node1节点2C/4Gnode1/192.168.99.111 Elasticsearch Node2节点2C/4Gnode2/192.168.99.122 Elasticsearch Elasticsearch-head Apache节点apache 192.168.99.143 Logstash Apache Kibana Filebeat节点192.168.99.161 Filebeat
安装Filebeat
#上传软件包 filebeat-6.2.4-linux-x86_64.tar.gz 到/opt目录
tar zxvf filebeat-6.2.4-linux-x86_64.tar.gz
mv filebeat-6.2.4-linux-x86_64/ /usr/local/filebeat设置 filebeat 的主配置文件
cd /usr/local/filebeatvim filebeat.yml
filebeat.prospectors:- type: log # 指定 log 类型从日志文件中读取消息enabled: true # 启用日志采集配置paths: # 日志文件所在的路径- /etc/httpd/logs/*logfields: # 可以使用 fields 配置选项设置一些参数字段添加到 output 中service_name: filebeatlog_type: logservice_id: 192.168.99.161--------------Elasticsearch output-------------------
(全部注释掉)----------------Logstash output---------------------
output.logstash:hosts: [192.168.99.143:5044] #指定 logstash 的 IP 和端口filebeat.inputs 指明了这里是输入配置模块
type 指明采集的数据类型是日志文件
enabled 指明启用日志采集配置
paths 指明日志文件所在的路径#启动 filebeat
./filebeat -e -c filebeat.yml在 Logstash 组件所在节点(143)上新建一个 Logstash 配置文件
cd /etc/logstash/conf.dvim logstash.conf
input {beats {port 5044}
}
output {elasticsearch {hosts [192.168.99.122:9200]index %{[fields][service_name]}-%{YYYY.MM.dd}}stdout {codec rubydebug}
}#启动 logstash
logstash -f logstash.conf#运行多个 Logstash 实例每个实例必须拥有自己独立的数据目录。可以在 logstash.yml 文件中或通过命令行参数指定不同的数据目录。
logstash -f logstash.conf --path.data /var/lib/logstash/data_instance4浏览器访问 http://192.168.99.143:5601 登录 Kibana单击“Create Index Pattern”按钮添加索引“filebeat-*”单击 “create” 按钮创建单击 “Discover” 按钮可查看图表信息及日志信息。