我们公司在内部部署了很多服务和测试以及正式环境的时候,查看日志就变成了一个非常迫切的需求。图片来自宝途网。是统一收集多个环境的日志,然后使用Nginx对外提供服务,还是使用专门的日志收集服务ELK?这就成了问题!Graylog作为集成方案,Elasticsearch用于存储。使用MongoDB做缓存,也有流控(throttling),其接口查询简单易用,易于扩展。所以,使用Graylog就成了最好的选择,让我们省了很多心。Filebeat工具介绍①Filebeat日志文件投递服务Filebeat是一个日志文件投递工具。在你的服务器上安装客户端后,Filebeat会自动监控给定的日志目录或指定的日志文件,跟踪并读取这些文件,并不断读取并将信息转发到Elasticsearch或Logstarsh或Graylog进行存储。②Filebeat工作流程介绍当您安装并启用Filebeat程序时,它会启动一个或多个探测器(prospectors)来检测您指定的日志目录或文件。对于检测器发现的每个日志文件,Filebeat将启动一个收集过程(harvester)。每个收集过程都会读取日志文件的最新内容,并将新的日志数据发送到处理程序(假脱机程序),该处理程序会聚合事件。最后,Filebeat会将收集到的数据发送到你指定的地址(我们这里是发送到Graylog服务)。③Filebeat图形理解和记忆我们这里不应用Logstash服务,主要是Filebeat比Logstash更轻量。当我们需要采集信息的机器配置或者资源不是特别多,也不是那么复杂的时候,推荐使用Filebeat来采集日志。在日常使用中,Filebeat可以通过多种方式安装部署,运行非常稳定。图解服务架构理解并记住Filebeat配置文件ConfigurationFilebeat工具的核心是如何编写其对应的配置文件!对应的Filebeat工具的配置主要通过编写其配置文件来控制。对于rpm或者deb包安装,配置文件默认存放在/etc/filebeat/filebeat.yml路径下。Mac或Win系统,请查看解压文件中的相关文件,均有涉及。Filebeat工具的主要配置文件如下所示,各字段的含义在评论信息中有详细解释,这里不再赘述。需要注意的是,我们定义日志的所有输入源都是读取inputs.d目录下的所有yml配置。因此,我们可以为更多未使用的服务(测试和正式服务)定义不同的配置文件,并根据物理机部署的实际情况进行配置。#配置输入源的日志信息#我们已经合理配置到inputs.d目录下的所有yml文件filebeat.config.inputs:enabled:truepath:${path.config}/inputs.d/*.yml#如果收费如果日志格式为json,请启用此配置#json.keys_under_root:true#配置Filebeat需要加载的模块filebeat.config.modules:path:${path.config}/modules.d/*.ymlreload.enabled:falsesetup。template.settings:index.number_of_shards:1#配置发送日志信息的地址output.logstash:hosts:["11.22.33.44:5500"]#output.file:#enable:trueprocessors:-add_host_metadata:~-rename:fields:-from:"log"to:"message"-add_fields:target:""fields:#AddingToken是为了防止Graylog服务在未经身份验证的服务上发送数据token:"0uxxxxaM-1111-2222-3333-VQZJxxxxxwgX》下面是inputs.d目录下一个简单的yml配置文件的具体内容。其主要功能是为各个服务配置独立的日志数据,并附加不同的数据标签类型。#采集的数据类型-type:logenabled:true#日志文件路径的路径地址:-/var/log/supervisor/app_escape_worker-stderr.log-/var/log/supervisor/app_escape_prod-stderr.logsymlinks:true#Included关键字信息include_lines:["WARNING","ERROR"]#放数据标签tags:["app","escape","test"]#防止程序栈信息被lines识别multiline.pattern:'^\[?[0-9]...{3}'multiline.negate:truemultiline.match:after#当需要配置多个日志时,可以添加多个type字段-type:logenabled:true...需要注意的是,针对不同的日志类型,filebeat也提供了不同的模块来配置不同的服务日志及其不同的模块特性,比如我们常见的PostgreSQl、Redis、Iptables等#iptables-module:iptableslog:enabled:truevar.paths:["/var/log/iptables.log"]var.input:"file"#postgres-module:postgresqllog:enabled:truevar.paths:["/path/to/log/postgres/*.log*"]#nginx-module:nginxaccess:enabled:truevar.paths:["/path/to/log/nginx/access.log*"]error:enabled:truevar.paths:["/path/to/log/nginx/error.log*"]Graylog服务介绍①Graylog日志监控系统Graylog是一个开源的日志聚合、分析、审计、展示和预警工具。从功能上来说,它和ELK差不多,但是比ELK要简单的多。凭借着更加简洁、高效、易于部署和使用等优势,迅速受到了很多人的青睐。当然在扩展性上它并不比ELK好,但是它有商业版本可以选择。②Graylog工作流程介绍部署Graylog最简单的架构是单机部署,最复杂的是集群部署。架构图如下所示。我们可以看到它包含三个组件,分别是Elasticsearch、MongoDB和Graylog。其中,Elasticsearch用于持久化存储和检索日志文件数据(IO密集型),MongoDB用于存储Graylog的相关配置,Graylog用于提供web接口和对外接口(CPU密集型)。尽量减少单机部署优化集群部署Graylog组件功能配置Graylog服务的核心是了解对应组件的功能及其运行方式!简单的说,Input代表日志数据的来源,不同来源的日志可以通过Extractors字段转换来记录,比如将Nginx的状态码改成对应的英文表达等,然后通过不同的标签类型对不同的流进行分组,并将这些日志数据存储在指定的索引库中进行持久化存储。Graylog中的核心服务组件Graylog通过Input收集日志,每个Input单独配置Extractor进行字段转换。Graylog中日志搜索的基本单位是Stream,每个Stream可以有自己独立的ElasticIndexSet,也可以共享一个IndexSet。提取器在系统/输入中配置。Graylog有一个很方便的地方就是可以加载一个日志,然后根据这个实例进行配置,直接看到结果。内置的Extractor基本可以完成各种字段的提取和转换任务,但是也有一些局限性,需要在应用中写日志时考虑。Input可以配置多个Extractor,这些Extractor按顺序执行。系统会有一个默认的Stream,所有的日志都会默认保存到这个Stream中,除非匹配到某个Stream,而这个Stream配置为不将日志保存到默认的Stream中。您可以通过菜单Streams创建更多的Streams。新创建的Stream处于暂停状态,配置完成后需要手动启动。Stream通过配置条件匹配日志,满足条件的日志添加流ID标识字段并保存到对应的ElasticIndexSet中。索引集通过菜单系统/索引创建。通过IndexSet配置日志存储的性能、可靠性和过期策略。性能和可靠性是配置ElasticIndex的一些参数。主要参数包括分片和副本。除了上面提到的日志处理流程,Graylog还提供了使用Pipeline脚本的更灵活的日志处理方案。这里就不细说了,只介绍如何使用Pipelines来过滤不需要的日志。下面是一个PipelineRule的例子,丢弃所有level>6的日志。从数据采集(输入),现场分析(提取器),分流到流,再到管道清洗,一气呵成,无需二次处理在其他方面。Sidecar是一个轻量级的日志收集器,接入Graylog进行集中管理,支持Linux和windows系统。Sidecar守护进程会周期性访问Graylog的RESTAPI接口,获取Sidecar配置文件中定义的标签。当Sidecar首次运行时,会从Graylog服务器拉取配置文件中指定标签(tag)的配置信息同步到本地。目前Sidecar支持NXLog、Filebeat和Winlogbeat。它们都通过Graylog中的web界面统一配置,支持Beats、CEF、Gelf、JsonAPI、NetFlow等输出类型。Graylog最强大的地方在于,你可以在配置文件中指定Sidecar将日志发送到哪个Graylog集群,并在Graylog集群中对多个输入进行负载均衡,这样Graylog就可以应对非常庞大的日志量。rule"discarddebugmessages"whento_long($message.level)>6thendrop_message();结束日志保存到Graylog后可以方便的查找。但是,有时需要对数据进行进一步处理。主要有两种方式,直接访问Elastic中存储的数据,或者通过Graylog的Output转发给其他服务。服务安装部署主要介绍部署Filebeat+Graylog的安装步骤和注意事项!使用Graylog收集日志①部署Filebeat工具官方提供了多种部署方式,包括通过rpm和deb包安装服务,编译源码安装服务也包括使用Docker或者kubernetes安装服务。我们可以根据自己的实际需要安装:#Ubuntu(deb)$curl-L-Ohttps://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.8.1-amd64.deb$sudodpkg-ifilebeat-7.8.1-amd64.deb$sudosystemctlenablefilebeat$sudoservicefilebeatstart#使用Docker启动dockerrun-d--name=filebeat--user=root\--volume="./filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro"\--volume="/var/lib/docker/containers:/var/lib/docker/containers:ro"\--volume="/var/run/docker.sock:/var/run/docker.sock:ro"\docker.elastic.co/beats/filebeat:7.8.1filebeat-e-strict.perms=false\-Eoutput.elasticsearch.hosts=["elasticsearch:9200"]②在这里部署Graylog服务我们主要介绍使用Docker容器部署服务。如需使用其他方式部署,请参考官方文档相应章节的安装部署步骤。在部署服务之前,我们需要为Graylog服务生成相关信息。生成的部署如下:#生成password_secret密码(最少16个字符)$sudoaptinstall-ypwgen$pwgen-N1-s16zscMb65...FxR9ag#生成后续web登录时需要的密码$echo-n"EnterPassword:"&&head-1
