Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ELK日志系统 - Logstash篇

ELK日志系统 - Logstash篇

作者头像
行 者
发布于 2019-12-10 02:49:56
发布于 2019-12-10 02:49:56
98100
代码可运行
举报
文章被收录于专栏:运维技术迷运维技术迷
运行总次数:0
代码可运行

前言

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

上面是官方对Logstash的解释,通俗讲logstash是一款日志收集器,收集的对象就是一些日志文件,比如服务器登陆日志、网站访问日志等等。然而由于各种各样日志的内容不同,格式也不太方便查看,因此我们可以是用logstash对日志进行收集和统一的过滤,使之变成可读性高的内容,方面我们的开发或者运维人员查看,从而有效的分析系统/项目运行的性能,做好监控和预警的准备工作等。

集中、转换和存储数据

就官方的解释而言,我们知道logstash的三大功能(个人理解),集中收集日志、转换/过滤内容、存储数据。在logstash配置文件中,我们会使用input、fileter、output来对此三大功能做定义和配置。

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

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

过滤/转换 - 实时解析和转换数据

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

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

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

尽管 Elasticsearch 是我们的首选输出方向,能够为我们的搜索和分析带来无限可能,但它并非唯一选择。Logstash 提供众多输出选择,您可以将数据发送到您要指定的地方,并且能够灵活地解锁众多下游用例。

安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 安装依赖
yum -y install java-openjdk-1.8.0

# 安装logstash
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.6.1.rpm
rpm -ivh logstash-6.6.1.rpm

or

rpm -Uvh https://artifacts.elastic.co/downloads/logstash/logstash-6.6.1.rpm

or  使用yum

配置使用

安装完成之后,我们使用-e来测试一下。Logstash管道有两个必需的元素,输入和输出,以及一个可选元素过滤器。输入插件从数据源那里来(消费数据),过滤器插件根据你的期望修改数据,输出插件将数据写入目的地。

下面是一个简单的示例,从标准输入到标准输出。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@openresty conf.d]# /usr/share/logstash/bin/logstash -e 'input { stdin {} } output { stdout {} }'
WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can 
specify the path using --path.settings. Continuing using the defaults
Could not find log4j2 configuration at path /usr/share/logstash/config/log4j2.properties. Using default config 
which logs errors to the console
[WARN ] 2019-03-13 11:38:45.011 [LogStash::Runner] multilocal - Ignoring the 'pipelines.yml' file because modules 
or command line options are specified
[INFO ] 2019-03-13 11:38:45.039 [LogStash::Runner] runner - Starting Logstash {"logstash.version"=>"6.6.1"}
[INFO ] 2019-03-13 11:38:53.968 [Converge PipelineAction::Create<main>] pipeline - Starting pipeline 
{:pipeline_id=>"main", "pipeline.workers"=>2, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50}
[INFO ] 2019-03-13 11:38:54.238 [Converge PipelineAction::Create<main>] pipeline - Pipeline started successfully 
{:pipeline_id=>"main", :thread=>"#<Thread:0x2cda5673 run>"}
The stdin plugin is now waiting for input:
[INFO ] 2019-03-13 11:38:54.358 [Ruby-0-Thread-1: /usr/share/logstash/lib/bootstrap/environment.rb:6] agent - 
Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[INFO ] 2019-03-13 11:38:54.760 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9600}
hello www.lianst.com
{
      "host" => "openresty",
   "message" => "hello www.lianst.com",
  "@version" => "1",
"@timestamp" => 2019-03-13T03:39:20.147Z
 }

在生产环境中,Logstash 的管道要复杂很多,可能需要配置多个输入、过滤器和输出插件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
input {
      # 日志来源
}

filter {
     # 过滤器
}

output {
    # 存储日志的目的地
}

常用插件及配置示例

输入插件

常规方法示例

logstash通常有三种输入插件:

  • 标准输入:stdin
  • 文件输入:file $PATH
  • 其他输入:beat、redis等
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
input {  # 三种输入方法不能共存,下面列子仅为示例。
      stdin {}  # 标准输入
      file {    # 文件输入
          path => ["/data/wwwlogs/*.log"]
          start_position => "beginning"
      }
       beats {  # beat输入
          port => 5044
     }
 }
 filter {
     # 过滤器
  }
  
output {
    # 存储日志的目的地
}

生产环境配置

在生产环境中,一般使用Filebeat来发送日志行到Logstash。Filebeat客户端是一个轻量级的、资源友好的工具,它从服务器上的文件中收集日志,并将这些日志转发到你的Logstash实例以进行处理。Filebeat设计就是为了可靠性和低延迟。Filebeat在主机上占用的资源很少,而且Beats input插件将对Logstash实例的资源需求降到最低。

注意:在一个典型的用例中,Filebeat和Logstash实例是分开的,它们分别运行在不同的机器上。在本文中,Logstash和Filebeat在同一台机器上运行。

1.安装filebeat

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.6.1-x86_64.rpm
rpm -ivh filebeat-6.6.1-x86_64.rpm

2.配置filebeat.yml

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@openresty ~]# cat /etc/filebeat/filebeat.yml  | grep "^\s*[^# \t].*$"
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /data/wwwlogs/*.log
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
setup.kibana:
output.logstash:
  hosts: ["10.10.0.2:5044"]
processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~

过滤插件

logstash有众多过滤器插件,比如grok、geoip等等,下面是用grok插件演示。

编写配置文件:file-filter-output.conf

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
input{
     file {
      path => ["/data/wwwlogs/*.log"]
      start_position => "beginning"
 }
 }
filter{
   grok{
       match =>  {"message" => "%{NGINXACCESS}"}
       remove_field => "message"
}
   date {
       match => ["timestamp","dd/MMM/YYYY:H:m:s Z" ]
       timezone => "Asia/Shanghai"
       remove_field => "timestamp"
}
   geoip {
       source => "remote_ip"
       target => "geoip"
       database => "/etc/logstash/maxmind/GeoLite2-City.mmdb"
       add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
       add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
}
  mutate {
      rename => {
        "agent" => "user_agent"
      }

}
}
output {
    stdout { codec => rubydebug }

}

执行/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/file-filter-output.conf -t检测配置文件语法是否有错误,没有的话就直接/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/file-filter-output.conf执行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
             "remote_ip" => "10.10.0.2",
                  "tags" => [
        [0] "_geoip_lookup_failure"
    ],
                  "host" => "openresty",
           "httpversion" => "1.1",
                 "bytes" => "8",
            "user_agent" => "\"curl/7.29.0\"",
               "request" => "/test12.html",
                  "path" => "/data/wwwlogs/host.access.log",
              "@version" => "1",
    "http_x_forward_for" => "\"185.105.159.83\""
}
{
                 "geoip" => {},
                "status" => "200",
                "method" => "GET",
            "@timestamp" => 2019-03-13T02:30:40.000Z,
               "referer" => "\"-\"",
             "remote_ip" => "10.10.0.2",
                  "tags" => [
        [0] "_geoip_lookup_failure"
    ],
                  "host" => "openresty",
           "httpversion" => "1.1",
                 "bytes" => "7",
            "user_agent" => "\"curl/7.29.0\"",
               "request" => "/test4.html",
                  "path" => "/data/wwwlogs/host.access.log",
              "@version" => "1",
    "http_x_forward_for" => "\"91.208.233.46\""
}
{
                 "geoip" => {},
                "status" => "200",
                "method" => "GET",
            "@timestamp" => 2019-03-13T02:30:41.000Z,
               "referer" => "\"-\"",
             "remote_ip" => "10.10.0.2",
                  "tags" => [
        [0] "_geoip_lookup_failure"
    ],
                  "host" => "openresty",
           "httpversion" => "1.1",
                 "bytes" => "8",
            "user_agent" => "\"curl/7.29.0\"",
               "request" => "/test13.html",
                  "path" => "/data/wwwlogs/host.access.log",
              "@version" => "1",
    "http_x_forward_for" => "\"115.85.242.137\""
}
{
                 "geoip" => {},
                "status" => "200",
                "method" => "GET",
            "@timestamp" => 2019-03-13T02:30:42.000Z,
               "referer" => "\"-\"",
             "remote_ip" => "10.10.0.2",
                  "tags" => [
        [0] "_geoip_lookup_failure"
    ],
                  "host" => "openresty",
           "httpversion" => "1.1",
                 "bytes" => "8",
            "user_agent" => "\"curl/7.29.0\"",
               "request" => "/test15.html",
                  "path" => "/data/wwwlogs/host.access.log",
              "@version" => "1",
    "http_x_forward_for" => "\"65.118.70.78\""
}
{
                 "geoip" => {},
                "status" => "200",
                "method" => "GET",
            "@timestamp" => 2019-03-13T02:30:43.000Z,
               "referer" => "\"-\"",
             "remote_ip" => "10.10.0.2",
                  "tags" => [
        [0] "_geoip_lookup_failure"

输出/存储插件

在正式的生产环境中,常见的输出方式有kafka、redis、elaticsearch、hadoop,这里我们使用elasticsearch。

编写file-filter-ela.conf配置文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
input{
     file {
          path => ["/data/wwwlogs/*.log"]
          start_position => "beginning"
}
}
filter{
       grok{
           match =>  {"message" => "%{NGINXACCESS}"}
           remove_field => "message"
}
       date {
           match => ["timestamp","dd/MMM/YYYY:H:m:s Z" ]
           timezone => "Asia/Shanghai"
           remove_field => "timestamp"
}
       geoip {
           source => "remote_ip"
           target => "geoip"
           database => "/etc/logstash/maxmind/GeoLite2-City.mmdb"
           add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
           add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
    }
      mutate {
          rename => {
            "agent" => "user_agent"
          }

    }
}

output {
    elasticsearch {
       hosts => ["10.10.0.3:9200","10.10.0.4:9200"]
        index => "logstash-%{+YYYY.MM.dd}"
        document_type => "nginx_logs"
}
}

依然使用/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/file-filter-ela.conf -t来检测一下语法,确认语法没有错误后执行/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/file-filter-ela.conf。

访问elasticsearch,搜索一下就可以看到数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@openresty ~]# curl http://node1:9200/logstash-*/_search?q=153.35.215.165 | jq .
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  8773  100  8773    0     0  84887      0 --:--:-- --:--:-- --:--:-- 85174
{
  "took": 98,
  "timed_out": false,
  "_shards": {
    "total": 10,
    "successful": 10,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 31,
    "max_score": 2.9549103,
    "hits": [
      {
        "_index": "logstash-2019.03.12",
        "_type": "nginx_logs",
        "_id": "WCirdGkBu_5TaHayAdky",
        "_score": 2.9549103,
        "_source": {
          "http_x_forward_for": "\"-\"",
          "host": "openresty",
          "user_agent": "\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36\"",
          "referer": "\"-\"",
          "@timestamp": "2019-03-12T09:43:39.000Z",
          "geoip": {
            "continent_code": "AS",
            "location": {
              "lon": 120.2625,
              "lat": 32.0142
            },
            "latitude": 32.0142,
            "coordinates": [
              "120.2625",
              "32.0142"
            ],
            "country_code3": "CN",
            "country_name": "China",
            "ip": "153.35.215.165",
            "timezone": "Asia/Shanghai",
            "city_name": "Jingjiang",
            "longitude": 120.2625,
            "region_name": "Jiangsu",
            "country_code2": "CN",
            "region_code": "JS"
          },
          "httpversion": "1.1",
          "path": "/data/wwwlogs/host.access.log",
          "method": "GET",
          "status": "404",
          "@version": "1",
          "bytes": "577",
          "request": "/test",
          "remote_ip": "153.35.215.165"
        }
      },
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ELK安装
https://blog.csdn.net/magerguo/article/details/79637646
dogfei
2020/07/31
6780
CentOS 7.6 部署ELK日志分析系统步骤
记录在CentOS 7.6下部署ELK日志分析系统的过程步骤,希望对大家有所帮助。
星哥玩云
2022/07/28
5030
利用 ELK系统分析Nginx日志并对数据进行可视化展示
这篇文章介绍的是单独监控nginx 日志分析再进行可视化图形展示,并在用户前端使用nginx 来代理kibana的请求响应,访问权限方面暂时使用HTTP 基本认证加密用户登录。(关于elk权限控制,我所了解的还有一种方式-Shield),等以后有时间了去搞下。下面开始正文吧。。。
星哥玩云
2022/06/18
9560
利用 ELK系统分析Nginx日志并对数据进行可视化展示
基于ELK Nginx日志分析
针对业务需求建立用户访问行为记录,基于ELK(Elasticsearch日志检索+Logstash日志收集+Kibana查询 展示)日志处理技术,建立业务日志采集和智能分析系统,实现了对访问用户的行为跟踪和针对不同类别用户的访问热点分析、趋势分析和对比分析。
Kevin song
2020/02/19
2.8K0
filebeat及logstash配置
在 Filebeat 的配置文件中,fields 配置项允许你添加自定义字段,以便更好地描述、分类或标记日志事件。
章工运维
2023/05/19
6730
Elastic Stack之 Logstash 6.7.1版本安装
1、截至目前Elasticsearch 版本已经更新到了7.10.1版本了,这里先使用Logstash 6.7.1版本,给一个下载地址,如下所示:
别先生
2021/01/13
5250
elk+filebeat+grafana日志收集平台学习笔记
node1:elasticsearch6.4+filebeat node2:kibana6.4+grafana+filebeat node3:logstash+nginx+filebeat+Redis 由于es很消耗内存,所以我只把es单独运行在一个主机上,并设置主分片为1,副本分片为0,每周定时删除上周的索引数据
没有故事的陈师傅
2019/07/27
3.8K0
05 . ELK Stack+Redis日志收集平台
filebeat是一个轻量级的日志采集器,由于logstash比较消耗资源,不适合在每台主机上部署logstash
iginkgo18
2020/09/27
1.1K0
05 . ELK Stack+Redis日志收集平台
ELK+filebeat+nginx+json 日志分析综合实战
2,将nginx日志改成json格式,这样各个字段就方便最终在kibana进行画图统计了
张哥编程
2024/12/07
1190
ELK+filebeat+nginx+json 日志分析综合实战
一文快速上手Logstash
Elasticsearch是当前主流的分布式大数据存储和搜索引擎,可以为用户提供强大的全文本检索能力,广泛应用于日志检索,全站搜索等领域。Logstash作为Elasicsearch常用的实时数据采集引擎,可以采集来自不同数据源的数据,并对数据进行处理后输出到多种输出源,是Elastic Stack 的重要组成部分。本文从Logstash的工作原理,使用示例,部署方式及性能调优等方面入手,为大家提供一个快速入门Logstash的方式。文章最后也给出了一些深入了解Logstash的的链接,以方便大家根据需要详细了解。
michelmu
2018/10/10
51.8K13
一文快速上手Logstash
利用ELK分析Nginx日志生产实战(高清多图)
本文以api.mingongge.com.cn域名为测试对象进行统计,日志为crm.mingongge.com.cn和risk.mingongge.com.cn请求之和(此二者域名不具生产换环境统计意义),生产环境请根据具体需要统计的域名进行统计。
民工哥
2020/09/16
1.9K0
了解Logstash
Logstash是一个开源数据收集引擎,具有实时管道功能。Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地。
java架构师
2019/01/02
1.3K0
ELK 采集 Nginx 日志联动 ZABBIX 实现 状态码 告警
Nginx 日志配置请参考微信公众号ELK专栏《基于ELK Nginx日志分析》的文章
Kevin song
2020/04/27
1.5K0
ELK 采集 Nginx 日志联动 ZABBIX 实现 状态码 告警
filebeat+logstash+influxdb+ Grafana打造网站日志监控系统
2.1 logstash的安装,我的版本是logstash-5.6.1-1.noarch
章工运维
2023/06/10
1.2K0
filebeat+logstash+influxdb+ Grafana打造网站日志监控系统
ELK 联动 ZABBIX 实现异常日志告警
本篇文章是基于"ELK 部署可视化网络日志分析监控平台"进行升级, 实现网络异常日志联动ZABBIX告警,网络日志分析监控平台部署请参考前期文章。
Kevin song
2020/02/19
3.1K0
ELK学习笔记之Logstash详解
官方介绍:Logstash is an open source data collection engine with real-time pipelining capabilities。简单来说logstash就是一根具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端;与此同时这根管道还可以让你根据自己的需求在中间加上滤网,Logstash提供里很多功能强大的滤网以满足你的各种应用场景。
Jetpropelledsnake21
2018/12/05
5.6K0
ELK学习笔记之Logstash详解
《Learning ELK Stack》3 使用Logstash采集、解析和转换数据
3 使用Logstash采集、解析和转换数据 理解Logstash如何采集、解析并将各种格式和类型的数据转换成通用格式,然后被用来为不同的应用构建多样的分析系统 ---- 配置Logstash 输入插
yeedomliu
2020/07/02
1.7K0
ELK日志分析系统安装和部署
1.1 平台环境: OS:CentOS release 6.4(Final) ElasticSearch:6.3.2 Logstash:6.3.2 Kibana:6.3.2 JRE:1.8
星哥玩云
2022/07/27
1.1K0
ELK日志分析系统安装和部署
Filebeat5+Kafka+ELK Docker搭建日志系统
纯粹是处于个人爱好,各种技术只要跟 Docker 搭边就倾爱它的 Docker 镜像版本。本文除了filebeat agent是二进制版本直接安装在应用机上,与docker无关,其他都是基于docker 镜像版本的集群安装。
曲水流觞
2019/11/05
9600
Filebeat5+Kafka+ELK Docker搭建日志系统
不背锅运维:享一个具有高可用性和可伸缩性的ELK架构实战案例
在logstash01主机上配置logstash,使其能够消费kafka集群a中主题为"wordpress-nginx-log"的消息。
不背锅运维
2023/03/16
6480
不背锅运维:享一个具有高可用性和可伸缩性的ELK架构实战案例
相关推荐
ELK安装
更多 >
LV.0
这个人很懒,什么都没有留下~
加入讨论
的问答专区 >
1高级后端开发工程师擅长3个领域
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    本文部分代码块支持一键运行,欢迎体验
    本文部分代码块支持一键运行,欢迎体验