今日目标
ELK环境的搭建,特别说明一下,我并不是为了学习而学习,而是旨在通过学习某种技术解决某些问题,所以我搭建ELK环境并不会像传统的那样按部就班,而是想要借助 ELK技术和理念 搭建一个自己项目所能用到的日志系统。
今日要完成的目标是可以在laravel项目中使用到ELK日志系统,完成日志的搜集以及分析
ELK搭建
要完成日志系统,需要有以下几个步骤
1.收集日志
2.存储日志
3.日志可视化
1.收集日志
在这一步我们需要完成日志的收集和发送
收集时可以用框架自带的日志记录工具,然后使用Filebeat 采集 Laravel 的本地日志
也可以用第三方比如monolog完成数据的采集和发送
甚至可以让 Laravel 直接将日志写入 Elasticsearch
.env环境变量配置
# 批改日志存在通道
LOG_CHANNEL=elasticsearch
# 增加 elasticsearch 日志存储配置
ELASTIC_HOST=127.0.0.1:9200 # elasticsearch 服务地址
ELASTIC_LOGS_INDEX=shopem-store-es-logs # elasticsearch 日志存储索引名
增加日志通道
在config/logging.php 文件里的 channels 里增加如下配置
'elasticsearch' => [
'driver' => 'monolog',
'level' => 'debug',
'handler' => \Monolog\Handler\ElasticsearchHandler::class,
'formatter' => \Monolog\Formatter\ElasticsearchFormatter::class,
'formatter_with' => [
'index' => env('ELASTIC_LOGS_INDEX'),
'type' => '_doc',
],
'handler_with' => [
'client' => \Elasticsearch\ClientBuilder::create()->setHosts([env('ELASTIC_HOST')])->build(),
],
],
遇到的问题
按照如上配置,会抛出异常
RuntimeException: Error sending messages to Elasticsearch in file D:\phpstudy_pro\WWW\elasticsearch-php\vendor\monolog\monolog\src\Monolog\Handler\ElasticsearchHandler.php on line 156
具体异常为
mapper_parsing_exception: failed to parse field [context] of type [text] in document with id 'ytJ8v....
应该是插入某些值到es中时类型不匹配,暂时不懂如何处理
所以就先屏蔽了ElasticsearchHandler.php 中的异常抛出
在ES-HEAD中查看
因为还没有安装kibaba,所以先在es-head中查看,可以看到已经存储进去一些日志了
2.安装kibaba
下载地址 在官网上可以下载到最新版本 https://www.elastic.co
https://artifacts.elastic.co/downloads/kibana/kibana-7.15.1-windows-x86_64.zip运行kibaba
同es一样,在bin目录下运行kibaba.bat即可访问
http://localhost:5601/
在猎豹浏览器下会出现报错,页面一直是 Loading Elastic,通过控制台报错查看应该是js问题
Refused to execute inline script because it violates the following Content Security Policy directive:
"script-src 'unsafe-eval' 'self'". Either the 'unsafe-inline' keyword, a hash
('sha256-P5polb1UreUSOe5V/Pv7tc+yeZuJXiOi/3fqhGsU7BE='), or a nonce ('nonce-...') is required to enable
inline execution.
切换到谷歌浏览器后可以正常访问
-
查看kibaba状态 http://localhost:5601/status
接下来要做的就是把自己的日志数据或者业务数据与kibaba建立联系,就可以图形化,近实时监控,可视化显示了
总结
这几天先是学习了ES的基本语法,尝试使用了ESapi的CURD,安装了ES-HEAD查看ES存储的内容,然后在项目中通过monolog收集了日志直接写入到ES,安装了kibaba,对ELK的技术架构有了一个简单的了解和认识,但还远远到不到商业使用,本期的简单学习就告一段落了,后期会在项目中尝试使用ES,并一步一步完善其架构