又拖了一些日子,然而是为了准备一个大新闻,一般来说我准备的这些运维方面的软件都是有了这个需求,然后需要解决什么问题才会研究这方面的软件的,这次也是为了解决一个问题,日志。
我们已经在代码中加入了log4j,在jboss或者tomcat的log文件夹中就能看到日志输出的信息了,一旦出了问题我们就可以找到日志,然后打开里面的内容去解决具体问题。
然而,假设我们的系统是一个大型的分布式系统,如果出了问题很可能需要查询多个服务器的日志,甚至可能会查系统日志,安全日志,软硬件信息等等,这样的话效率一下就降低了很多,所以呢,也是找到了一个日志收集的这么个系统。
开源实时日志收集系统ELK,ELK分别是三个东西,ElasticSearch,Logstash,Kiabana。
Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制, restful 风格接口,多数据源,自动搜索负载等。
Logstash是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用。
kibana 也是一个开源和免费的工具,他Kibana 可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
虽然说着这么复杂,其实总结起来就是,L负责搜集日志,E负责搜索,K负责页面显示。
好了,我们的Logstash需要JDK,这个我就不写教程了,应该都会装的,我们去官网下载一波压缩包。
wget https://download.elastic.co/logstash/logstash/logstash-2.3.1.tar.gz
下载之后解压。
tar zxvf ./logstash-2.3.1.tar.gz
移动到新的文件夹。
mv ./logstash-2.3.1 ./logstash
解压之后就可以启动试试了。不过这次启动我们先看看有什么效果,执行。
cd ./logstash
./bin/logstash -e 'input { stdin { } } output { stdout {} }'
执行完成之后,我们可以试着在命令行中输入信息,我们输入什么,logstash就会在屏幕上显示什么,并且写成一种特定的格式。比如我写一个helloworld,屏幕上就会显示这个。
{
"message" => "helloWorld",
"@version" => "1",
"@timestamp" => "2016-05-15T22:07:28.284Z",
"host" => "noc.vfast.com"
}
这种情况下就算可以了,但是呢,我们既然是搜集日志,我们就先配置一个系统的日志试试。我们添加一个搜集系统日志的配置文件,里面写这些内容
input {
file {
type =>"syslog"
path => ["/var/log/messages", "/var/log/syslog" ]
}
syslog {
type =>"syslog"
port =>"5544"
}
}
output {
stdout { codec=> rubydebug }
elasticsearch {hosts=> "127.0.0.1:9200" }
}
这里就是规定了日志的位置,然后类型,提交给ElasticSearch的地址等等,应该能看的出来。
这样就算配置好一个Logstash了,不难看出logstash是怎么实现分布式搜集日志的,首先定义了文件的位置,然后读取文件并且输出成一种固定的格式,最后提交给远程的ElasticSearch的服务端,这样服务端接收数据之后就能进行全文索引了。
今天就这样- -