• Filebeat+Logstash+Elasticsearch测试


    安装配置好三个软件使之能够正常启动,下面开始测试。

    第一步

    elasticsearch提供了restful api,这些api会非常便利,为了方便查看,可以使用postman调用接口。
    1、查看Elasticsearch服务是否正常

    GET http://120.27.110.143:9200
    

    如果服务正常将会返回以下格式数据

    {
        "name": "node-1",   # 节点名称
        "cluster_name": "es_cluster",  # 集群名称
        "cluster_uuid": "p_19Z1wFQA2tUWwJr6BjpA",  # 集群uuid
        "version": {  # elasticsearch的版本信息
            "number": "6.4.0",  # 版本号
            "build_flavor": "default",  # 默认构建
            "build_type": "tar",  # 构建类型
            "build_hash": "595516e",  # 构建hash
            "build_date": "2018-08-17T23:18:47.308994Z",  # 构建时间
            "build_snapshot": false,  # 构建快照
            "lucene_version": "7.4.0",  # lucene版本
            "minimum_wire_compatibility_version": "5.6.0",  # 最小兼容版本
            "minimum_index_compatibility_version": "5.0.0"  # 最小索引兼容版本
        },
        "tagline": "You Know, for Search"  # 品牌口号
    }
    

    Tip
    (1)节点名称和集群名称是可配置的,在elasticsearch.yml配置文件中可修改
    (2)120.27.110.143是Elasticsearch服务所在的服务器地址,要使外部可以通过ip地址访问Elasticsearch,同样需要在elasticsearch.yml中配置network.host: 0.0.0.0

     
     

    (3)elasticsearch.yml配置文件中还有其他配置项,具体情况具体配置

    2、查看Elasticsearch里的索引数据

    GET http://120.27.110.143:9200/_cat/indices?v
    

    服务正常情况下回返回以下格式数据

    health status index                       uuid                   pri rep docs.count docs.deleted store.size pri.store.size
    yellow open   nagios-dashboard-2018.09.17 YPsJER0dRYSY7cHXJqm_WQ   5   1       1108            0    622.9kb        622.9kb
    yellow open   logstash-2018.09.18         mm3r8OEeTrmw3vBrt4RdwQ   5   1        302            0    686.9kb        686.9kb
    yellow open   filebeat-6.4.0-2018.09.18   qBq5H37iQEiw86x7mDSJpg   5   1        500            0    342.2kb        342.2kb
    

    由于之前已经运行过一次服务所以产生了以上数据
    3、删除Elasticsearch里的索引数据

    DELETE http://120.27.110.143:9200/logstash-2018.09.18?pretty
    

    如果索引名称无误将会返回

    {
        "acknowledged": true
    }
    

    如果索引名称有误则会返回404

    第二步

    已经删除之前产生的数据,现在开始测试
    1、使用Elasticsearch官网提供的测试数据logstash-tutorial.log文件
    我们看一下logstash-tutorial.log文件内容

    hsl@iZ282hpfj1mZ:~$ vi logstash-tutorial.log 
    

    里面含有100条以下格式的数据

    83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-dashboard3.png HTTP/1.1" 200 171717 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"
    
     
     

    2、配置filebeat
    filebeat可以单独和elasticsearch使用,不通过logstash,差别在于没有logstash分析过滤,存储的是原始数据,而将数据转发到logstash分析过滤后,存储的是格式化数据,下面通过对比可以看到

    首先配置filebeat.yml文件如下

    filebeat.prospectors:
    - type: log  # filebeat处理类型为log文件
      paths:
        - /home/hsl/logstash-tutorial.log  # log文件的绝对路径
    output.elasticsearch:  # 输出到elasticsearch
      hosts: ["localhost:9200"]
    tail_files: true  # 从文件末尾读取
    

    Tip
    (1)paths可以是多个日志文件的绝对路径
    (2)output有多个输出方式,可以输出到logstash,也可以输出到数据库存储,考虑到全文检索,官网建议使用elasticsearch数据库。
    (3)hosts可以是多个数据库地址,由于filebeat和elasticsearch在同一台服务器上所以可以写成localhost:9200,当然也可以换成它的IP120.27.110.143:9200

    3、运行filebeat

    hsl@iZ282hpfj1mZ:~/filebeat-6.4.0-linux-x86_64$ ./filebeat -e -c filebeat.yml -d "publish"
    

    如果一切正常将会看到以下输出


     
     

    可以看到上面的输出,以及下面的红框中的内容,
    Connected to Elasticsearch version 6.4.0
    已经连接到elasticsearch数据库,
    Template already exists and will not be overwritten.
    模板已经存在并且不会被重写。

    下面通过postman查看elasticsearch数据库

    GET  http://120.27.110.143:9200/_cat/indices?v
    

    结果如图所示


     
     

    index:filebeat-6.4.0-2018.09.18是生成的索引名称,具体的生成规则暂时还不知道如何配置,下次再讨论。
    docs.count:100文档数量是100对应我们的测试文件。

    可以看一下具体的数据格式

    GET  http://120.27.110.143:9200/filebeat-6.4.0-2018.09.18/_search?pretty
    

    结果如图所示


     
     

    每个文档中的具体内容如下

    {
             "_index": "filebeat-6.4.0-2018.09.18",  # 索引名
             "_type": "doc",  # 类型
             "_id": "3ZWv6mUBvd_PCv61-X6v",  # id
             "_score": 1,  # 得分
             "_source": {
                  "@timestamp": "2018-09-18T03:18:44.531Z",  # 时间戳
                  "message": "83.149.9.216 - - [04/Jan/2015:05:13:42 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-dashboard3.png HTTP/1.1" 200 171717 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"",  # 一行日志内容
                  "source": "/home/hsl/logstash-tutorial.log",  # 来源
                  "offset": 325,  #  物理地址位移
                  "input": {
                       "type": "log"  # 输入类型
                   },
                  "prospector": {
                       "type": "log"
                   },
                  "beat": {
                      "hostname": "iZ282hpfj1mZ",  # beat所在主机名
                      "version": "6.4.0",  # 版本号
                      "name": "iZ282hpfj1mZ"  # beat名
                   },
                   "host": {
                       "name": "iZ282hpfj1mZ"  # 主机名
                   }
           }
    }
    

    现在关闭filebeat并且重新启动一次看数据是否会变
    通过服务器日志输出以及postman查询可以看到并没有将数据再次写入到elasticsearch中


     
     

     
     

    现在向logstash-tutorial.log文件中添加一行

    hsl@iZ282hpfj1mZ:~$ echo '86.1.76.62 - - [04/Jan/2015:05:30:37 +0000] "GET /style2.css HTTP/1.1" 200 4877 "http://www.semicomplete.com/projects/xdotool/" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20140205 Firefox/24.0 Iceweasel/24.3.0"' >> /home/hsl/logstash-tutorial.log 
    

    可以看到当文件发生改变是filebeat会自动监控到并执行


     
     

    下面看一下elasticsearch中的数据,如果无误现在的文档数量应该是101

     
     

    Tip
    (1)当使用vi打开文件,在文件末尾添加一行,保存并退出后,filebeat会将上一次发送时的offset读取重新发送一次,推送两次event,导致数据重复。具体的官网解释翻译如下:
    你怎么修改文件?你试过了$ echo 'new line' >> /usr/src/app/log.log吗?filebeat试图根据元数据来检测文件是否是新的。一些工具/编辑器创建一个全新的文件保存并取消旧链接。这被filebeat检测为新文件,迫使它重新发送所有内容。
    4、测试filebeat监控多个日志文件
    首先修改filebeat.yml文件如下:

    filebeat.prospectors:
    - type: log
      paths:
        - /home/hsl/logstash-tutorial.log
    - type: log
      paths:
        - /home/hsl/logstash-tutorial_copy.log  # 复制一份测试用例日志
    output.elasticsearch:
      hosts: ["120.27.110.143:9200"]
    tail_files: true
    

    然后,清空elasticsearch数据,并执行以下命令,删除注册信息

    hsl@iZ282hpfj1mZ:~/filebeat-6.4.0-linux-x86_64$ rm data/registry 
    

    最后重新启动filebeat

    hsl@iZ282hpfj1mZ:~/filebeat-6.4.0-linux-x86_64$ ./filebeat -e -c filebeat.yml -d "publish"
    

    如果一切正常,数据库中将会有202条数据

     
     

    第三步

    1、将filebeat输出改为logstash

    filebeat.prospectors:
    - type: log
      paths:
        - /home/hsl/logstash-tutorial.log
    output.logstash:  # 将数据发送到logstash
      hosts: ["120.27.110.143:5044"]
    tail_files: true
    

    2、增加logstash管道文件first-pipeline.conf文件
    内容如下:

    input {  # 输入
        beats {  # 来源beats
            port => "5044"  # 端口
        }
    }
     filter {  # 分析、过滤插件,可以多个
        grok {
            match => { "message" => "%{COMBINEDAPACHELOG}"}
        }
        geoip {
            source => "clientip"
        }
    }
    output {  # 输出
        elasticsearch {  # 选择elasticsearch
            hosts => ["localhost:9200"]
            }
    }
    

    3、启动logstash

    hsl@iZ282hpfj1mZ:~/logstash-6.4.0$ bin/logstash -f first-pipeline.conf --config.reload.automatic
    

    --config.reload.automatic自动重载配置文件
    如果正常启动,将会输入以下内容

     
     

    4、启动filebeat
    hsl@iZ282hpfj1mZ:~/filebeat-6.4.0-linux-x86_64$ ./filebeat -e -c filebeat.yml -d "publish"
    

    5、查看elasticsearch

    GET http://120.27.110.143:9200/_cat/indices?v
    

    结果如下

    health status index                     uuid                   pri rep docs.count docs.deleted store.size pri.store.size
    yellow open   filebeat-6.4.0-2018.09.18 CWijkL6cTE2kNMXP-cQeMA   5   1        202            0     97.1kb         97.1kb
    yellow open   logstash-2018.09.18       7b9NzO15QFWr3FLPeszThA   5   1        101            0    256.3kb        256.3kb
    

    logstash-2018.09.18是新建的索引,并且文档数正好为101
    查看数据的具体格式

    GET http://120.27.110.143:9200/logstash-2018.09.18/_search?pretty
    
     
     

    具体某一条的数据如下:

    {
        "_index": "logstash-2018.09.18",  # 索引名
        "_type": "doc",  # 类型doc
        "_id": "NZVj62UBvd_PCv61z4OP",  # 文档id
        "_score": 1,  # 得分
        "_source": {
            "message": "83.149.9.216 - - [04/Jan/2015:05:13:43 +0000] "GET /presentations/logstash-monitorama-2013/images/kibana-dashboard.png HTTP/1.1" 200 321631 "http://semicomplete.com/presentations/logstash-monitorama-2013/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"",  # 原消息
            "request": "/presentations/logstash-monitorama-2013/images/kibana-dashboard.png",  # 请求
            "agent": ""Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.77 Safari/537.36"",  # 用户代理
            "@timestamp": "2018-09-18T06:35:09.345Z",  # 创建时间
            "response": "200",  # 返回码
            "geoip": {  # IP地址信息
                "location": {
                    "lon": 37.6184,
                    "lat": 55.7485
                },
                "longitude": 37.6184,
                "continent_code": "EU",
                "region_code": "MOW",
                "timezone": "Europe/Moscow",
                "postal_code": "101194",
                "country_code2": "RU",
                "latitude": 55.7485,
                "region_name": "Moscow",
                "country_name": "Russia",
                "country_code3": "RU",
                "city_name": "Moscow",
                "ip": "83.149.9.216"
            },
            "offset": 2932,  # 位移数
            "clientip": "83.149.9.216",  # 请求接口的IP地址
            "beat": {  # beat信息
                "hostname": "iZ282hpfj1mZ",
                "name": "iZ282hpfj1mZ",
                "version": "6.4.0"
            },
            "tags": [  # 标签
                "beats_input_codec_plain_applied"
            ],
            "verb": "GET",  # 请求方法
            "input": {  # 输入
                "type": "log"
            },
            "@version": "1",  # 版本
            "timestamp": "04/Jan/2015:05:13:43 +0000",  # 接口请求时间
            "referrer": ""http://semicomplete.com/presentations/logstash-monitorama-2013/"",  # 引用URL
            "prospector": {  
                "type": "log"
            },
            "source": "/home/hsl/logstash-tutorial.log",  # 来源
            "host": {  # 主机名
                "name": "iZ282hpfj1mZ"
            },
            "bytes": "321631",  # 大小
            "auth": "-",  # 认证
            "ident": "-",  # 用户id
            "httpversion": "1.1"  # http版本
        }
    }
    

    回顾filebeat存在elasticsearch数据库里的数据格式,不难发现,logstash存储起来的数据多出了一些其他字段,这些字段信息是logstash分析过滤原消息得出的格式化信息。
    6、给日志文件写入新日志

    hsl@iZ282hpfj1mZ:~$ echo '86.1.76.62 - - [04/Jan/2015:05:30:37 +0000] "GET /style2.css HTTP/1.1" 200 4877 "http://www.semicomplete.com/projects/xdotool/" "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20140205 Firefox/24.0 Iceweasel/24.3.0"' >> /home/hsl/logstash-tutorial.log 
    

    查看elasticsearch数据库验证

    GET http://120.27.110.143:9200/_cat/indices?v
    

    返回结果如下

    health status index                     uuid                   pri rep docs.count docs.deleted store.size pri.store.size
    yellow open   filebeat-6.4.0-2018.09.18 CWijkL6cTE2kNMXP-cQeMA   5   1        202            0     97.1kb         97.1kb
    yellow open   logstash-2018.09.18       7b9NzO15QFWr3FLPeszThA   5   1        102            0    279.5kb        279.5kb
    

    可以看到logstash-2018.09.18索引的dosc.count从原来的101变为102

    以上是filebeat+logstash+elasticsearch的一些测试。

     


    作者:几回寒暑
    链接:https://www.jianshu.com/p/88d9ad372a85
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    一点小小的心得
    JavaScript的跳转脚本举例
    如何在Windows Server 2008 R2上开启Windows Power Shell ISE
    如何设置密码输错N次后自动锁住账户?
    IE的local intranet zone里有个URL删不掉, 怎么办?
    理解cookie机制
    ajaxpro.2.dll 简单应用
    cookie概述
    PetShop是如何兼容数据库的.NET教程,数据库应用
    .Net PetShop 4.0的分布式数据库设计.NET教程,.NET Framework
  • 原文地址:https://www.cnblogs.com/shiluoliming/p/10516902.html
Copyright © 2020-2023  润新知