一、elk简介
elk是elasticsearch、logstash、kibana三个开源软件的缩写。elasticsearch是一款基于lucene的搜索引擎,可以处理大量数据并快速查询;logstash是一款开源日志收集处理工具,可以对多种日志进行收集、解析、过滤和转化;kibana则是一款用于数据可视化和交互的工具,可以快速生成各种图表和仪表盘。
elk具有使用简单、性能高效、可扩展性强等特点,并且支持多种数据源。它可以帮助企业快速搭建起一套强大的日志分析平台,用于监控系统及应用的运行状态。
二、php实现elk
在使用elk的过程中,我们一般先使用logstash进行日志的收集、解析和转化,然后再将数据存储到elasticsearch中,在使用kibana进行可视化展示。而php作为一种流行的服务器端脚本语言,同样可以通过使用logstash和elasticsearch库来实现日志的收集和存储。
1.安装logstash
logstash的安装非常简单,我们可以通过官方网站的下载页面选择对应的版本,然后解压到指定目录即可。例如,我们可以通过以下命令在linux系统中进行安装:
curl -l -o https://download.elastic.co/logstash/logstash/logstash-5.5.2.tar.gztar -zxvf logstash-5.5.2.tar.gzcd logstash-5.5.2/bin/./logstash -e 'input { stdin { } } output { stdout {} }'
执行以上命令后,我们可以通过标准输入来测试logstash是否成功安装。当然,为了更好地对于使用php收集日志进行介绍,我们还需要安装相关的库。
2.安装elasticsearch库
我们使用composer来管理php库的依赖关系。在安装logstash之后,我们可以使用以下命令来安装elasticsearch依赖库:
composer require elasticsearch/elasticsearch
3.配置logstash
在使用logstash进行日志收集之前,我们还需要配置logstash的相关参数。首先,我们需要对于logstash的输入进行定义。在输入配置中,我们可以使用一些非常有用的插件,例如:
file:用于读取文件中的日志udp、tcp:用于读取udp和tcp协议的日志syslog:用于读取系统的syslog日志beats:可以直接接收beats协议的日志在这里,我们使用file插件来读取服务器上的日志文件,并进行解析和处理。例如:
input { file { path => "/var/log/apache2/access.log" type => "apache_access" }}
接着,我们需要对于logstash的过滤进行配置。过滤可以对于日志进行分析和处理,例如提取特定字段、进行ip地址或url地址解析等。以下为一个简单的过滤器:
filter { if [type] == "apache_access" { grok { match => { "message" => "%{combinedapachelog}" } } date { match => [ "timestamp" , "dd/mmm/yyyy:hh:mm:ss z" ] } }}
然后,我们可以对于logstash输出进行定义。输出可以将处理后的数据输出到elasticsearch或者其他数据存储介质中,例如数据库、文件等。以下为一个输出配置:
output { elasticsearch { hosts => ["localhost:9200"] index => "%{[@metadata][beat]}-%{+yyyy.mm.dd}" user => "elastic" password => "changeme" }}
4.使用php收集日志
在进行了以上的配置之后,我们就可以使用php来收集日志了。以下是一个简单的php脚本,可以运行于linux或者其他类unix环境中:
<?phprequire 'vendor/autoload.php';use elasticsearchclientbuilder;$client = clientbuilder::create()->build();$log_path = '/var/log/apache2/access.log';$log_index = 'apache_access';if(!file_exists($log_path)) { echo "log file '{$log_path}' not exists."; exit;}$file_size = filesize($log_path);if($file_size == 0) { exit;}$lines = file($log_path);if(empty($lines)) { exit;}foreach($lines as $line) { $log = []; $log['@timestamp'] = date('c'); $log['message'] = $line; $log['type'] = $log_index; $params = [ 'body' => $log, 'index' => 'logs', 'type' => $log_index ]; $response = $client->index($params);}
在以上代码中,我们首先使用elasticsearch客户端库来创建一个客户端实例。然后,我们定义了一个$log_path变量来指定读取的日志文件路径。接下来,我们使用file_exists()函数来判断该文件是否存在,filesize()函数来获取文件大小,以及file()函数来读取文件内容。
在foreach循环中,我们遍历文件中的每一行,将每一行日志的格式存储到$log数组中。这里,我们还将日志的类型和当前的时间戳存储到$log数组中。最后,我们使用elasticsearch的index()方法将$log数组发送到elasticsearch中。
三、总结
通过以上的介绍,我们可以看到elk日志分析平台的工作流程。通过使用logstash进行日志收集、解析和转化,再将数据存储到elasticsearch中,并使用kibana对数据进行可视化和交互展示,可以帮助我们快速高效地分析日志数据。同时,php作为一种流行的服务器端脚本语言,也可以使用logstash和elasticsearch库进行日志收集和存储。
以上就是php实现开源elk日志分析平台的详细内容。
