使用ELK搭建日志平台

Elasticsearch

Elasticsearch 是一个分布式、可扩展、实时的搜索与数据分析引擎。经常用来做全文搜索、结构化数据的实时统计。

索引相当于关系数据库中的数据库 ,类型相当于是关系数据库的表。

关系型数据库使用B数索引,Elasticsearch使用倒排索引。

LogStash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到Elasticsearch中。

Beats 是轻量级的采集器,采用Go编写,相比于使用JVM的Elasticsearch,开销更小,适合于在各个服务器上搜集日志后传输给Logstash,包含以下类型:

Filebeat 是 Beats 系列中的一种,Filebeat 支持从文件中收集数据,还支持许多其他数据源,包括 TCP/UDP、容器、Redis 和 Syslog。借助丰富的模块,可以轻松针对 Apache、MySQL 和 Kafka 等常见应用程序的日志格式收集和解析相应的数据。

Kibana 对Elasticsearch的数据做可视化。

安装步骤按照官方文档来就可以了:https://www.elastic.co/cn/products/log-monitoring

装好以后需要注意调整一些配置:

设置Kibana的host,默认是localhost,这样的话不能从其他机器进行访问,我这里是设置为开发服的IP:

server.host: “10.250.160.174”

设置Filebeat需要采集的日志目录,默认采集/var/log目录,因为我们要采集项目文件夹下面的日志,加上一行就行了:

默认是一行被认为是一条日志内容,我们需要把下面这种日志内容解析为一条消息:

[17-Sep-2019 11:39:57 Asia/Shanghai] PHP Fatal error: Uncaught Symfony\Component\Debug\Exception\FatalThrowableError: syntax error, unexpected ‘$this’ (T_VARIABLE) in /workspace/data/www/data-warehouse/src/Manager/Kom/KomMaterialModelManager.php:305 Stack trace: #0 [internal function]: Symfony\Component\Debug\DebugClassLoader->loadClass(‘App\Manager\Kom…’) #1 [internal function]: spl_autoload_call(‘App\Manager\Kom…’) #2 /workspace/data/www/data-warehouse/vendor/symfony/config/Resource/ClassExistenceResource.php(78): class_exists(‘App\Manager\Kom…’) #3 /workspace/data/www/data-warehouse/vendor/symfony/dependency-injection/ContainerBuilder.php(353): Symfony\Component\Config\Resource\ClassExistenceResource->isFresh(0) #4 /workspace/data/www/data-warehouse/vendor/symfony/dependency-injection/Loader/FileLoader.php(150): Symfony\Component\DependencyInjection\ContainerBuilder->getReflectionClass(‘App\Manager\Kom…’) #5 /workspace/data/www/data-warehouse/vendor/symfony/dependency-injection/Loader/FileLoader.php(57): Symfony\Component\DependencyInjection\L in /workspace/data/www/data-warehouse/src/Manager/Kom/KomMaterialModelManager.php on line 305

设置多行解析规则:

Multiline options

multiline.pattern: ^[ multiline.negate: true multiline.match: after