Logstash——安装Logstash并完成一个简单的日志收集功能

下载和安装

下载logstash

Logstash可以在以下地址下载

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

在这里插入图片描述

需要注意在安装ELK环境的时候需要保证三者系统版本一致。假如需要下载历史版本可以在此下载

https://www.elastic.co/cn/downloads/past-releases#logstash

ps.此网站访问可能会非常慢,需要配合梯子。

解压

这里在之前的博客中: Elasticsearch基础02——Elasticsearch的安装使用的7.2.0版本的Elasticsearch所需我下载的是对应版本的logstash

tar -xzvf logstash-7.2.0.tar.gz

配置文件

因为我们可能需要配置不同的日志规则所以需要我们编写logstatsh的配置文件,然后指定配置进行启动

这是一个简单的logstash配置

input {
  file {
    path => "/usr/local/log/exception/*"
    start_position => "beginning"
    sincedb_path => "/dev/null"  }
}
output {
   elasticsearch {
     hosts => "http://localhost:9200"
     index => "exception_demo"
     user => exception_user
     password => exception
   }
  stdout {}
}

配置的简单介绍

  • input
input {
  file {
    # 日志文件地址
    path => "/usr/local/log/exception/*"
    # 监听文件的起始位置,beginning或者end
    start_position => "beginning"
    # 监听文件读取信息记录的位置
    sincedb_path => "/dev/null"  
  }
}
  • sincedb_path

简单的介绍一下这个配置,第一次配置时,运行logstash对日志文件进行的读取操作,这个过程logstash会记录自己读取完日志文件的位置,然后将自己读取内容的偏移量保存到一个隐藏文件中。当再次启动的时候logstash从隐藏文件中的读取完成的日志文件位置。假如我们希望再次启动的时候依旧读取所有文件信息,可以设置sincedb_path => "/dev/null"。/dev/null”这个 Linux 系统上特殊的空洞文件,那么 logstash 每次重启进程的时候,尝试读取 sincedb 内容,都只会读到空白内容。

数据来源的配置

  • output

数据输出的配置

output {
   # 将数据保存到elasticsearch
   elasticsearch {
     # elasticsearch服务端口
     hosts => "http://localhost:9200"
     # 数据推送的索引
     index => "exception_demo"
     # 假如设置了elasticsearch密码账号登录则需要配置此内容
     # 账号
     user => exception_user
     # 密码
     password => exception
   }
  stdout {}
}

ps.此处配置中关于密码账号的配置可能存在一些问题,这一块我会在下面启动logstash时出现的异常里面介绍

启动

在设置完logstash配置后就可以指定配置启动logstash

# 此时需要处在logstash目录下
bin/logstash -f ./config/logstash.conf

启动成功

当出现下面内容则证明logstash启动成功

[2020-04-05T20:44:04,754][INFO ][logstash.javapipeline    ] Pipeline started {"pipeline.id"=>"main"}
[2020-04-05T20:44:04,884][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2020-04-05T20:44:04,889][INFO ][filewatch.observingtail  ] START, creating Discoverer, Watch with file and sincedb collections
[2020-04-05T20:44:05,638][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}

启动成功后logstash会从指定的log文件下读取数据写入elasticsearch中。

在这里插入图片描述

kibana中查看数据

在kibana中management页面配置相关索引的查询

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ICHshd3b-1586685616311)(9751671D03504CFB97A29228F6E88433)]

discover页面就可以进行日志内容的查询

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MSePoD00-1586685616312)(EBEB280C2AD04BD9A76907E25EE4D83E)]

持续性的日志写入

在项目中配置log的写入地址为配置中path的地址就能实现日志的持续监控

    <!--一个spring项目的日志配置demo-->
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="ERROR_HOME" value="/usr/local/log/exception" />

logstash时出现的异常

1. Got response code ‘401’ contact Elasticsearch

[2016-12-28T17:49:08,367][WARN ][logstash.outputs.elasticsearch] Attempted to resurrect connection to dead ES instance, but got an error. {:url=>#<URI::HTTP:0x1deb02b URL:http://10.129.28.149:9200>, :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::BadResponseCodeError, :error=>"Got response code '401' contact Elasticsearch at URL 'http://10.129.28.149:9200/'"}

如果Elasticsearch设置了密码访问的时候,此时logstash配置也需要配置相关信息

output {
   # 将数据保存到elasticsearch
   elasticsearch {
     ...
     # 假如设置了elasticsearch密码账号登录则需要配置此内容
     # 账号
     user => exception_user
     # 密码
     password => exception
   }
  ...
}

2. undefined method `encoding’

[2020-04-05T12:06:11,361][INFO ][logstash.runner          ] Starting Logstash {"logstash.version"=>"7.2.0"}
[2020-04-05T12:06:14,721][ERROR][logstash.javapipeline    ] Pipeline aborted due to error 
{:pipeline_id=>"main", :exception=>#<NoMethodError: undefined method `encoding' for 123456:Integer>, :
backtrace=>["uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/cgi/util.rb:13:in `escape'", 

这个异常是在设置账号信息的时候密码使用了纯数字的时候,目前不知道为什么纯数字的密码解析会出问题,但是将密码设置为非数字密码就可以避免此异常。

3. Encountered a retryable error. Will Retry with exponential backoff {:code=>403, :url=>“http://localhost:9200/_bulk”}

此异常出现在成功启动logstash,但是在读取log日志写入elasticsearch时出现的异常,logstash会不停的尝试将数据刷入elasticsearch但是不停失败。在 Elasticsearch安全策略-开启密码账号访问logstash_system被描述为将信息存储到Elasticsearch中时使用的。但是最开始配置此账号会出现403的问题,后来创建了一个新的角色并设置了和elastic相同的超级管理员权限后此异常消失。(需要注意的此解决方案可能不是最合理的解决方式)

在这里插入图片描述


个人水平有限,上面的内容可能存在没有描述清楚或者错误的地方,假如开发同学发现了,请及时告知,我会第一时间修改相关内容。假如我的这篇内容对你有任何帮助的话,麻烦给我点一个赞。你的点赞就是我前进的动力。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章