elk日志分析系统_大型分布式系统的日志集中分析ELK

ELK是什么?

Elasticsearch Logstash Kibana 原来称为 ELK Stack ,现在称为Elastic Stack,加入了 beats 来优化Logstash。

来自官网的介绍:

Elasticsearch:无论您正在查找来自特定 IP 地址的活动,还是正在分析交易请求数量为何突然飙升,或者正在方圆一公里内搜寻美食店,我们尝试解决的这些问题归根结底都是搜索。通过 Elasticsearch,您可以轻松地存储、搜索和分析大量数据。

Kibana:在 Kibana 中通过炫酷的可视化来探索您的数据,从华夫饼图到热点图,再到时序数据分析,应有尽有。针对多样化数据源使用预配置仪表板,创建实时演示文稿以突出显示 KPI,并使用单一 UI 来管理您的部署。

所有工作最开始都是要将数据导入到 Elasticsearch 中。您可通过各种便捷方式将全部数据集中到一起,既可使用 Beats 采集来自应用和基础设施的指标,也可使用 Logstash 从第三方数据存储库中提取数据,方法十分多样。解析、充实、匿名化,还有更多。

ELK的主要用途:

大型分布式系统的日志集中分析。

一个完整的集中式日志系统,需要包含以下几个主要特点:

  • 收集-能够采集多种来源的日志数据
  • 传输-能够稳定的把日志数据传输到中央系统
  • 转换— 能够对收集的日志数据进行转换处理
  • 存储-如何存储日志数据
  • 分析-可以支持 UI 分析
  • 告警-能够提供错误报告,监控机制

ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。

ELK架构

老的架构:

0de7167e2e69acf4f1df6e1b8a633506.png

用beats来进行采集的架构:

60df2e55fa216ca101ca709c918432bf.png

Beats

Beats 是一个免费且开放的平台,集合了多种单一用途数据采集器。它们从成百上千或成千上万台机器和系统向 Logstash 或 Elasticsearch 发送数据。

Beats 的已有种类

Filebeat:轻量型日志采集器

Winlogbeat:轻量型Windows事件日志采集器

Metricbeat:轻量型指标采集器

Heartbeat:轻量型运行时间监控采集器

Packketbeat:轻量型网络数据采集器

Auditbeat:轻量型审计日志采集器

FileBeat

日志文件采集器,Filebeat监视日志目录或特定日志文件,然后将它们转发到Elasticsearch或Logstash进行索引。

工作原理

77198c21eade768b6a462e0fefd97057.png

Prospector 勘测者:负责管理Harvester并找到所有读取源。

Harvestor 收割机:负责读取单个文件内容,发送到输出

启动Filebeat时,它将启动一个或多个勘测者,这些勘测者会查看为日志文件指定的本地路径。 对于勘测者找到的每个日志文件,Filebeat都会启动一个收割机。 每个收割机都读取一个日志文件以获取新内容,并将新日志数据发送到libbeat,libbeat会汇总事件并将汇总数据发送到为Filebeat配置的输出。

下载

本次讲解的版本6.2.4

下载地址:https://www.elastic.co/downloads/past-releases/filebeat-6-2-4

最新版下载地址:https://www.elastic.co/cn/downloads/beats/filebeat

使用步骤

配置:在 filebeat.yml 中配置从哪些文件读取数据,送到哪里去

1、配置勘测采集源

filebeat.prospectors:- type: log  enabled: true  paths:    - /var/log/*.log    #- c:programdataelasticsearchlogs*

2、配置输出送到es中去

output.elasticsearch:  hosts: ["192.168.1.42:9200"]

若ES有认证,配置用户密码

output.elasticsearch:  hosts: ["myEShost:9200"]  username: "elastic"  password: "elastic"

3、启动filebeat

linux rpm : sudo service filebeat start

windows:

安装了服务:PS C:Program FilesFilebeat> Start-Service filebeat

如果没有安装服务,在安装目录直接运行启动程序 filebeat

sudo ./filebeat

可加启动选项:-e 输入日志到标准输出, -c 指定配置文件

如:sudo ./filebeat -e -c filebeat.yml

4、配置索引模板

默认情况下,如果输出是elasticsearch,filebeat自动创建推荐的索引模板(定义在fields.yml中)。

如果你想使用自定义的模板,可在 filebeat.yml中配置指定你的模板

setup.template.name: "your_template_name"setup.template.fields: "path/to/fields.yml"

覆盖已存在的模板

setup.template.overwrite: true

设置默认的模板失效

setup.template.enabled: false

改变索引的名字。默认为filebeat-6.2.4-yyyy.MM.dd

#名字中应包含版本和日期部分output.elasticsearch.index: "customname-%{[beat.version]}-%{+yyyy.MM.dd}"setup.template.name: "customname"setup.template.pattern: "customname-*"#使用kibana的dashboard时需要#setup.dashboards.index: "customname-*"

当输出是logstash时,需手动执行命令来向es创建模板

filebeat setup --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'

重启filebeat后才会创建

5、配置使用kibana的dashboards。在 filebeat.yml 中:

setup.dashboards.enabled: truesetup.kibana:  host: "mykibanahost:5601"

有认证的配置

setup.kibana:  host: "mykibanahost:5601"  username: "elastic"    password: "elastic"

重启filebeat,在kibana中浏览 Discover Visualize DashBoard

配置输出到logstash

output.logstash:  hosts: ["127.0.0.1:5044"]

Filebeat modules配置

Filebeat modules:提供了一种快速处理常见日志格式的快速方法。 它们包含默认配置,Elasticsearch接收节点管道定义以及Kibana仪表板,以帮助实施和部署日志监视解决方案。

Filebeat提供了几种不同的方式来启用模块:

  1. 在modules.d目录中启用模块配置
888a9ca9a3ee1aef648b379cae460140.png

modules.d目录包含Filebeat中所有可用模块的默认配置。 可以通过运行modules enable或modules disable命令来启用或禁用modules.d下的特定模块配置。

例如,要在modules.d目录中启用apache2和mysql配置,使用:

./filebeat modules enable apache2 mysql

运行Filebeat时,它将加载modules.d目录中指定的相应模块配置(例如,modules.d / apache2.yml和modules.d / mysql.yml)。

查看已启用和已禁用模块的列表:

./filebeat modules list
  1. 运行Filebeat时启用模块

要在命令行运行Filebeat时启用特定模块,可以使用--modules标志。以下示例显示了如何启用和运行nginx,mysql和系统模块。

./filebeat -e --modules nginx,mysql,system
  1. 在filebeat.yml文件中启用模块配置
filebeat.modules:- module: nginx- module: mysql- module: system

使用modules.d前,需要安装对应的插件,例如:

sudo bin/elasticsearch-plugin install ingest-geoipsudo bin/elasticsearch-plugin install ingest-user-agent

Filebeat prospectors配置

Filebeat使用勘测者来查找和处理文件。 要配置Filebeat,在filebeat.yml配置文件的filebeat.prospectors部分中指定勘测者列表。

filebeat.prospectors:- type: log  paths:    - /var/log/apache/httpd-*.log- type: log  paths:    - /var/log/messages    - /var/log/*.log

可选配置:

可选配置比较多,可以参看:

https://www.elastic.co/guide/en/beats/filebeat/6.2/configuration-filebeat-options.html#_configuration_options

以下介绍几个常见配置:

type:可选选项

log:读取日志文件的每一行(默认)。
stdin:读入标准。
redis:从redis读取慢速日志条目。
udp:通过UDP读取事件。 另请参见max_message_size。
docker:从Docker读取日志。

paths:

Filebeat为在指定路径下找到的每个文件启动收割机。 可以每行指定一个路径。 每行以破折号(-)开头。

encoding:

用于读取包含国际字符的文件的文件编码。

以下是来自W3C建议的一些示例编码:
plain,latin1,utf-8,utf-16be-bom,utf-16be,utf-16le,big5,gb18030,gbk,hz-gb-2312,
euc-kr,euc-jp,iso-2022-jp,shift-jis等

exclude_lines:

正则表达式列表,以匹配要Filebeat排除的行。 Filebeat会删除列表中与正则表达式匹配的所有行。 默认情况下,不删除任何行。 空行将被忽略。

filebeat.prospectors:- paths:    - /var/log/myapp/*.log  exclude_lines: ['^DBG']

include_lines:

正则表达式列表,以匹配要Filebeat包括的行。 Filebeat仅导出与列表中的正则表达式匹配的行。 默认情况下,所有行均被导出。 空行将被忽略。

filebeat.prospectors:- paths:    - /var/log/myapp/*.log  include_lines: ['^ERR', '^WARN']

tags:

Beat包含在每个已发布事件的标签字段中的标签列表。 使用标记,可以轻松地在Kibana中选择特定事件或在Logstash中应用条件过滤。

filebeat.prospectors:- paths: ["/var/log/app/*.json"]  tags: ["json"]

fields:

可以指定可选字段以将其他信息添加到输出中。 例如,可以添加可用于过滤日志数据的字段。 字段可以是标量值,数组,字典或它们的任何嵌套组合。

filebeat.prospectors:- paths: ["/var/log/app/*.log"]  fields:    app_id: query_engine_12

prospectors 的processors配置:

有时候我们需要用Filebeat导出数据的一部分,或者可能需要增强导出的数据(例如,通过添加元数据)。 Filebeat提供了两个选项来筛选和增强导出的数据。
1. 配置每个输入以包括或排除特定的行或文件。 这需要为每个输入指定不同的过滤条件。使用配置文件的filebeat.inputs(prospectors)块下的include_lines,exclude_lines和exclude_files选项。 这种方法的缺点是,需要为所需的每个过滤条件实现一个配置选项。
2. processors,以对Filebeat导出的所有数据进行全局处理。

每个processors都接收一个事件,对该事件应用已定义的操作,然后返回该事件。 如果定义处理器列表,则将按照在Filebeat配置文件中定义的顺序执行它们。

event -> processor 1 -> event1 -> processor 2 -> event2 ...

以下配置删除所有日志中的DEBUG消息。

processors:  - drop_event:      when:        regexp:          message: "^DBG:"

删除日志文件的包含某个条件全部信息

processors:  - drop_event:      when:        contains:          source: "test"

Filebeat multiline配置

Filebeat收集的文件可能包含跨越多行文本的消息。 例如,多行消息在包含Java堆栈跟踪的文件中很常见。 为了正确处理这些多行事件,需要在filebeat.yml文件中配置multiline设置,以指定哪些行是单个事件的一部分。

在filebeat.yml配置文件的filebeat.prospectors部分中指定以下选项,以控制Filebeat如何处理跨越多行的消息。
下面的示例显示如何配置Filebeat以处理多行消息,其中消息的第一行以方括号([)开头。

multiline.pattern: '^['multiline.negate: truemultiline.match: after

Filebeat接受所有不以[开头的行,并将它们与上一行合并。如以下日志信息:

[beat-logstash-some-name-832-2015.11.28] IndexNotFoundException[no such index]    at org.elasticsearch.cluster.metadata.IndexNameExpressionResolver$WildcardExpressionResolver.resolve(IndexNameExpressionResolver.java:566)    at org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.concreteIndices(IndexNameExpressionResolver.java:133)    at org.elasticsearch.cluster.metadata.IndexNameExpressionResolver.concreteIndices(IndexNameExpressionResolver.java:77)    at org.elasticsearch.action.admin.indices.delete.TransportDeleteIndexAction.checkBlock(TransportDeleteIndexAction.java:75)

更多的input配置请参看:

https://www.elastic.co/guide/en/beats/filebeat/current/filebeat-input-log.html

Filebeat output配置

输出到Elasticsearch:

当输出指定Elasticsearch时,Filebeat将使用Elasticsearch HTTP API将事务直接发送到Elasticsearch。

output.elasticsearch:  hosts: ["https://localhost:9200"]  index: "filebeat-%{[agent.version]}-%{+yyyy.MM.dd}"  ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]  ssl.certificate: "/etc/pki/client/cert.pem"  ssl.key: "/etc/pki/client/cert.key"

要启用SSL,只需将https添加到主机下定义的所有URL。

output.elasticsearch:  hosts: ["https://localhost:9200"]  username: "filebeat_internal"  password: "YOUR_PASSWORD"

要使用API密钥连接到Elasticsearch

output.elasticsearch:  hosts: ["https://localhost:9200"]  api_key: "VuaCfGcBCdbkQm-e5aOx:ui2lp2axTNmsyakw9tvNnw"

如果Elasticsearch例程由IP:PORT定义,则将协议:https添加到yaml文件。

output.elasticsearch:  hosts: ["localhost"]  protocol: "https"  username: "filebeat_internal"  password: "YOUR_PASSWORD"

设置输出指定的索引

output.elasticsearch:  hosts: ["http://localhost:9200"]  indices:    - index: "warning-%{[agent.version]}-%{+yyyy.MM.dd}"      when.contains:        message: "WARN"    - index: "error-%{[agent.version]}-%{+yyyy.MM.dd}"      when.contains:        message: "ERR"

输出到管道

output.elasticsearch:  hosts: ["http://localhost:9200"]  pipeline: my_pipeline_id

更多的配置参看:https://www.elastic.co/guide/en/beats/filebeat/current/elasticsearch-output.html#elasticsearch-output

输出到Logstash:

output.logstash:  hosts: ["127.0.0.1:5044"]

hosts选项指定Logstash服务器以,5044为侦听传入Beats连接的端口

用到自定义模板时,需要手动创建索引模板

发送到Logstash的每个事件都包含以下元数据字段,可以在Logstash中使用这些字段进行索引和过滤:

{    ...    "@metadata": {       "beat": "filebeat",       "version": "7.8.0"     }}

@metadata字段将元数据发送到Logstash

beat默认值为filebeat。 要更改此值,请在Filebeat配置文件中设置index选项。

37cdb581be03947562213596f2c77493.png

version:Filebeat的当前版本。

可以从Logstash配置文件中访问此元数据,以根据元数据的内容动态设置值。
例如,以下Logstash配置文件告诉Logstash使用Filebeat报告的索引将事件索引到Elasticsearch:

input {  beats {    port => 5044  }}output {  elasticsearch {    hosts => ["http://localhost:9200"]    index => "%{[@metadata][beat]}-%{[@metadata][version]}"   }}

loadbalance:设置负载均衡

如果设置为true并配置了多个Logstash主机,则输出插件将发布的事件负载平衡到所有Logstash主机上。 如果设置为false,则输出插件将所有事件仅发送到一个主机(随机确定),如果所选主机无响应,则将切换到另一主机。 默认值为false。

更多设置参看:https://www.elastic.co/guide/en/beats/filebeat/current/logstash-output.html

Logstash

集中、转换和存储数据

Logstash 是免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中。

Logstash 能够动态地采集、转换和传输数据,不受格式或复杂度的影响。利用 Grok 从非结构化数据中派生出结构,从 IP 地址解码出地理坐标,匿名化或排除敏感字段,并简化整体处理过程。

输入

采集各种样式、大小和来源的数据

数据往往以各种各样的形式,或分散或集中地存在于很多系统中。Logstash 支持各种输入选择,可以同时从众多常用来源捕捉事件。能够以连续的流式传输方式,轻松地从您的日志、指标、Web 应用、数据存储以及各种 AWS 服务采集数据。

b9f03b62ba60f4b571b25bfa545a7110.png

筛选

数据从源传输到存储库的过程中,Logstash 过滤器能够解析各个事件,识别已命名的字段以构建结构,并将它们转换成通用格式,以便进行更强大的分析和实现商业价值。

Logstash 能够动态地转换和解析数据,不受格式或复杂度的影响:

  • 利用 Grok 从非结构化数据中派生出结构
  • 从 IP 地址破译出地理坐标
  • 将 PII 数据匿名化,完全排除敏感字段
  • 简化整体处理,不受数据源、格式或架构的影响
68e608865ca348b603d3503317ba33ee.png

输出

选择您的存储库,导出您的数据

尽管 Elasticsearch 是我们的首选输出方向,能够为我们的搜索和分析带来无限可能,但它并非唯一选择。

7bb4d8227884b063a6d1b073bbb1931a.png

下载:

https://www.elastic.co/cn/downloads/logstash

logstash Pipeline 管道 工作原理

启动logstash实例时需为其指定管道定义。

eb182c2382fa41765509c6f655facc24.png

最简单的管道定义来启动logstash实例

cd logstash-6.2.4bin/logstash -e 'input { stdin { } } output { stdout {} }'

用logstash来解析日志

1、配置 Filebeat 将日志发送给logstash

filebeat.prospectors:- type: log  paths:    - /path/to/file/logstash-tutorial.log output.logstash:  hosts: ["localhost:5044"]

2、配置Logstash的管道输入为 Filebeat

管道定义模板

# The # character at the beginning of a line indicates a comment. Use# comments to describe your configuration.input {}# The filter part of this file is commented out to indicate that it is# optional.# filter {## }output {}

在logstash home目中创建文件管道配置文件 first-pipeline.conf,配置如下:

input {    beats {        port => "5044"    }}# The filter part of this file is commented out to indicate that it is# optional.# filter {## }output {    stdout { codec => rubydebug }}

测试管道配置是否正确

bin/logstash -f first-pipeline.conf --config.test_and_exit

启动logstash实例

bin/logstash -f first-pipeline.conf --config.reload.automatic

3、配置filter 来解析日志

input {    beats {        port => "5044"    }}#配置使用 grok 过进行滤转换filter {    grok {        match => { "message" => "%{COMBINEDAPACHELOG}"}    }}output {    stdout { codec => rubydebug }}

关闭filebeat实例,执行 sudo rm data/registry 删除filebeat记录,再启动filebeat

4、再加入一个过滤器

#实现ip转地理坐标geoip {        source => "clientip"    }

5、配置输出到elasticsearch

output {    elasticsearch {        hosts => [ "localhost:9200" ]    }}

input

Logstash中实现了很多input 插件,可满足我们各种来源数据的接收:

https://www.elastic.co/guide/en/logstash/current/input-plugins.html

配置从多个input获取数据

input {    stdin { }    file {        path => "/tmp/*_log"    }    beats {        port => "5044"    }}

filter

Logstash中实现了很多filter 插件:

https://www.elastic.co/guide/en/logstash/current/filter-plugins.html

可多重过滤处理

filter {    grok {        match => { "message" => "%{COMBINEDAPACHELOG}"}    }    geoip {        source => "clientip"    }}

如何解析日志文本为字段

用 grok 过滤器

Grok match 表达式语法:

%{SYNTAX:SEMANTIC}

预定义的正则表达式:

https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns

例如:

55.3.244.1 GET /index.html 15824 0.043

%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}

output

Logstash中实现了很多output 插件:

https://www.elastic.co/guide/en/logstash/current/output-plugins.html

输出到多个地方

output {    elasticsearch {        hosts => ["IP Address 1:port1", "IP Address 2:port2", "IP Address 3"]    }    file {        path => "/path/to/target/file"    }    stdout { codec => rubydebug }}

codec

Logstash中实现了很多codec插件,可以在input 中指定用什么codec来读取输入内容;可以在output中指定输出什么格式。

更多配置:https://www.elastic.co/guide/en/logstash/current/configuration.html

Kibana

Kibana 是一款开源的数据分析和可视化平台,它是 Elastic Stack 成员之一,设计用于和 Elasticsearch 协作。您可以使用 Kibana 对 Elasticsearch 索引中的数据进行搜索、查看、交互操作。可以很方便的利用图表、表格及地图对数据进行多元化的分析和呈现。

Kibana 可以使大数据通俗易懂。它很简单,基于浏览器的界面便于您快速创建和分享动态数据仪表板来追踪 Elasticsearch 的实时数据变化。

搭建 Kibana 非常简单。可以分分钟完成 Kibana 的安装并开始探索 Elasticsearch 的索引数据 — 没有代码、不需要额外的基础设施。

下载:

https://www.elastic.co/guide/cn/kibana/current/install.html

Kibana server 启动时从 kibana.yml 文件中读取配置属性

server.port:

默认值: 5601 Kibana 由后端服务器提供服务,该配置指定使用的端口号。

server.host:

默认值: "localhost" 指定后端服务器的主机地址。

server.basePath:

如果启用了代理,指定 Kibana 的路径,该配置项只影响 Kibana 生成的 URLs,转发请求到 Kibana 时代理会移除基础路径值,该配置项不能以斜杠 (/)结尾。

server.maxPayloadBytes:

默认值: 1048576 服务器请求的最大负载,单位字节。

server.name:

默认值: "您的主机名" Kibana 实例对外展示的名称。

server.defaultRoute:

默认值: "/app/kibana" Kibana 的默认路径,该配置项可改变 Kibana 的登录页面。

elasticsearch.url:

默认值: "http://localhost:9200" 用来处理所有查询的 Elasticsearch 实例的 URL 。

elasticsearch.preserveHost:

默认值: true 该设置项的值为 true 时,Kibana 使用 server.host 设定的主机名,该设置项的值为 false 时,Kibana 使用主机的主机名来连接 Kibana 实例。

kibana.index:

默认值: ".kibana" Kibana 使用 Elasticsearch 中的索引来存储保存的检索,可视化控件以及仪表板。如果没有索引,Kibana 会创建一个新的索引。

kibana.defaultAppId:

默认值: "discover" 默认加载的应用。

elasticsearch.username: 和 elasticsearch.password:

Elasticsearch 设置了基本的权限认证,该配置项提供了用户名和密码,用于 Kibana 启动时维护索引。Kibana 用户仍需要 Elasticsearch 由 Kibana 服务端代理的认证。

elasticsearch.pingTimeout:

默认值: elasticsearch.requestTimeout setting 的值,等待 Elasticsearch 的响应时间。

elasticsearch.requestTimeout:

默认值: 30000 等待后端或 Elasticsearch 的响应时间,单位微秒,该值必须为正整数。

elasticsearch.requestHeadersWhitelist:

默认值: [ 'authorization' ] Kibana 客户端发送到 Elasticsearch 头体,发送 no 头体,设置该值为[]。

elasticsearch.customHeaders:

默认值: {} 发往 Elasticsearch的头体和值, 不管 elasticsearch.requestHeadersWhitelist 如何配置,任何自定义的头体不会被客户端头体覆盖。

elasticsearch.shardTimeout:

默认值: 0 Elasticsearch 等待分片响应时间,单位微秒,0即禁用。

elasticsearch.startupTimeout:

默认值: 5000 Kibana 启动时等待 Elasticsearch 的时间,单位微秒。

用法手册

https://www.elastic.co/guide/cn/kibana/current/createvis.html

基本流程

82d96f87dc947af930346e765595bbcf.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值