解决方案:iLogtail社区版使用入门 - 主机环境采集业务日志到SLS

优采云 发布时间: 2022-11-29 14:19

  解决方案:iLogtail社区版使用入门 - 主机环境采集业务日志到SLS

  iLogtail是阿里云日志服务(SLS)团队自研的可观察数据采集代理。它具有轻量级、高性能和自动配置等许多生产级特性。可以部署在物理机、虚拟机、Kubernetes等多种环境中。采集

遥测数据。iLogtail服务过阿里云上万台客户主机和容器的可观测性采集工作。也是阿里巴巴集团核心产品线,如淘宝、天猫、支付宝、菜鸟、高德的默认日志和监控。、Trace等可观察数据采集

工具。目前,iLogtail 已经有数千万的安装量,每天采集

数十 PB 的可观察数据。广泛应用于在线监控、问题分析/定位、操作分析、安全分析。其威力在实战中得到了验证。性能和稳定性。

  在如今的云原生时代,我们坚信开源是iLogtail最好的发展战略,也是释放其最大价值的途径。因此,我们决定开源iLogtail,期待与众多开发者一起将iLogtail打造成世界一流的可观察数据采集器

  背景

  日志作为可观测性建设的重要组成部分,可以记录详细的访问请求和错误信息,在业务分析和问题定位中往往起到非常重要的作用。在一般的开发场景中,需要进行日志分析时,往往会使用grep直接在日志文件中搜索对应的关键字;但是,在*敏*感*词*分布式生产环境中,这种方式效率低下,常见的解决方案是建立一个集中的日志采集

系统,统一采集

、管理和分析所有节点上的日志。目前市面上主流的开源方案是基于ELK搭建日志采集分析系统。

  在该架构中,Filebeat作为日志源采集代理部署在业务集群上,进行原创

日志采集,采集到的日志发送到消息队列Kafka集群。之后Logstash从Kafka消费数据,经过过滤处理后,将标准化的日志写入Elasticsearch集群存储。最后通过Kibana呈现给用户查询。这种架构虽然可以提供比较完善的日志采集

和分析功能,但是整体涉及的组件较多,*敏*感*词*生产环境部署复杂度高,大流量下ES可能不稳定,运维成本会高。

  阿里云提供的SLS服务是一种纯粹定位于日志/时序可观测数据分析场景的云托管服务。相比ELK,它在日志领域做了大量的定制化开发。、成本和其他便利方面表现良好。iLogtail作为SLS官方标准的可观察数据采集器,在日志采集性能和K8s支持方面有着不错的体验;iLogtail具有明显的性能优势,可以对部分数据进行预处理,有效降低存储成本。

  目前iLogtail的社区版也对SLS提供了很好的支持。本文将详细介绍如何使用社区版iLogtail,结合SLS云服务,快速搭建高可用、高性能的日志采集分析系统。

  备注:与iLogtail企业版相比,iLogtail社区版核心采集能力基本相同,但控制和可观察能力会有所减弱。这些能力需要配合SLS服务器才能发挥出来。欢迎使用iLogtail企业版体验。有关两个版本之间差异的详细信息,请参见链接。

  SLS简介

  日志服务SLS是一个云原生的观察分析平台,为Log、Metric、Trace等数据提供*敏*感*词*、低成本、实时的平台服务。日志服务提供数据采集、处理、查询分析、可视化、告警、消费、交付等一站式功能,全面提升您在研发、运维、运营、安全等场景的数字化能力。

  通过SLS,您可以快速搭建自己的可观察分析平台,您可以快速享受SLS提供的各种数据服务,包括但不限于:查询分析、可视化、告警等。

  操作实战

  下面介绍如何使用iLogtail社区版将宿主环境业务日志采集到SLS。

  场景

  采集

/root/bin/input_data/access.log、/root/bin/input_data/error.log,并将采集

到的日志写入SLS。

  其中access.log需要定时解析;error.log 是单行文本打印。

  如果之前使用过iLogtail采集日志到Kafka,迁移阶段可以保持双写,Kafka Flusher稳定后删除配置。

  先决条件

  安装iLogtail

  $ wget https://ilogtail-community-edition.oss-cn-shanghai.aliyuncs.com/1.1.0/ilogtail-1.1.0.linux-amd64.tar.gz

tar -xzvf ilogtail-1.1.0.linux-amd64.tar.gz

$ cd ilogtail-1.1.0

$ ll

drwxrwxr-x 5 505 505 4096 7月 10 18:00 example_config

-rwxr-xr-x 1 505 505 84242040 7月 11 00:00 ilogtail

-rwxr-xr-x 1 505 505 16400 7月 11 00:00 libPluginAdapter.so

-rw-r--r-- 1 505 505 115963144 7月 11 00:00 libPluginBase.so

-rw-rw-r-- 1 505 505 11356 7月 11 00:00 LICENSE

-rw-rw-r-- 1 505 505 5810 7月 11 00:00 README-cn.md

<p>

" />

-rw-rw-r-- 1 505 505 4834 7月 11 00:00 README.md

-rw-rw-r-- 1 505 505 118 7月 14 11:22 ilogtail_config.json

drwxr-xr-x 2 root root 4096 7月 12 09:55 user_yaml_config.d</p>

  $ cat ilogtail_config.json

{

"default_access_key_id": "xxxxxx",

"default_access_key": "yyyyy"

}

  在user_yaml_config.d中为access_log和error_log创建两个采集配置。两种采集配置分别将日志采集到SLS的不同logstore和不同Kafka的topic中。双写适用于从Kafka迁移到SLS的场景。如果迁移完成且稳定,可以删除flusher_kafka,只保留flusher_sls。

  # 访问日志采集配置

$ cat user_yaml_config.d/access_log.yaml

enable: true

inputs:

- Type: file_log

LogPath: /root/bin/input_data/

FilePattern: access.log

processors:

- Type: processor_regex

SourceKey: content

Regex: ([\d\.]+) \S+ \S+ \[(\S+) \S+\] \"(\w+) ([^\\"]*)\" ([\d\.]+) (\d+) (\d+) (\d+|-) \"([^\\"]*)\" \"([^\\"]*)\"

Keys:

- ip

- time

- method

- url

- request_time

- request_length

- status

- length

- ref_url

- browser

flushers:

- Type: flusher_sls

Endpoint: cn-hangzhou.log.aliyuncs.com

ProjectName: test-ilogtail

LogstoreName: access-log

- Type: flusher_kafka

Brokers:

- localhost:9092

<p>

" />

Topic: access-log

# 错误日志采集配置

$ cat user_yaml_config.d/error_log.yaml

enable: true

inputs:

- Type: file_log

LogPath: /root/bin/input_data/

FilePattern: error.log

flushers:

- Type: flusher_sls

Endpoint: cn-hangzhou.log.aliyuncs.com

ProjectName: test-ilogtail

LogstoreName: access-log

- Type: flusher_kafka

Brokers:

- localhost:9092

Topic: error-log

$ tree user_yaml_config.d/

user_yaml_config.d/

├── access_log.yaml

└── error_log.yaml</p>

  $ nohup ./ilogtail > stdout.log 2> stderr.log &

  核实

  # 写入访问日志

$ echo &#39;127.0.0.1 - - [10/Aug/2017:14:57:51 +0800] "POST /PutData?Category=YunOsAccountOpLog HTTP/1.1" 0.024 18204 200 37 "-" "aliyun-sdk-java"&#39; >> /root/bin/input_data/access.log

  # 写入错误日志

$ echo -e &#39;2022-07-12 10:00:00 ERROR This is a error!\n2022-07-12 10:00:00 ERROR This is a new error!&#39; >> /root/bin/input_data/error.log

  总结

  以上,我们介绍了使用iLogtail社区版采集日志到SLS的方法。如果您想体验iLogtail企业版与SLS更深层次的集成能力,欢迎使用iLogtail企业版,与SLS合作搭建可观察平台。

  关于iLogtail

  iLogtail作为阿里云SLS提供的可观察数据采集器,可以运行在服务器、容器、K8s、嵌入式等多种环境中,支持上百种可观察数据(日志、监控、轨迹、事件等)的采集。数以千万计的安装量。目前iLogtail已正式开源,欢迎使用和参与共建。

  GitHub: /alibaba/ilogtail

  社区版文档:ilogtail.gitbook.io/ilogtail-docs/about/readme

  企业版官网:/document_detail/65018.html

  钉钉群:iLogtail社区

  解决方案:架构解密从分布式到微服务:对全文检索中间件的全面讲解

  全文搜索和消息队列中间件

  在前面的章节中,我们学习了构建分布式系统所必需的各种基础知识和技能,比如分布式系统的基础理论、网络编程技术、RP架构、内存计算分布式文件系统、分布式计算框架等。但仅仅掌握这些内容是不够的。我们还需要学习和掌握分布式系统中常用的一些中间件。这些中间件主要用于分布式系统中一些常见的业务场景。数据全文检索、日志和消息处理、数据库分片、网站负载均衡等。限于篇幅,本章只对全文搜索和消息队列这两个应用广泛且相对复杂的中间件进行全面介绍。

  全文搜索

  我们已经习惯了通过在线搜索来快速学习知识和解决技术问题,这就需要网络搜索引擎。如何在海量的网页(文本)信息中准确、快速地找到所有收录

我们搜索的关键词的网页,并进行合理的排序和展示,确实是一个非常具有挑战性的问题。

  除了我们日常工作中使用的搜索引擎外,大量的互联网应用程序都需要关键字搜索(即全文搜索)功能。要了解关键字检索的价值,我们需要了解关系数据库索引的局限性。当我们在SQL查询语句中使用“%keyword%”这样的查询条件时,数据库的索引就不起作用了。至此,查找就变成了一个类似于翻书一页的遍历过程,几乎都是IO操作,因此对性能有很大的负面影响;如果需要对多个关键词进行模糊匹配,比如like“%keyword1%”,like“%keyword2%”,此时的查询效率可想而知。

  关键词检索本质上是以“词组(关键词)”为单位分析一系列文本文件的内容,并生成相应的索引记录。索引存储了关键词和文章的映射关系。在映射关系中记录了关键词的文章编号、出现次数、出现频率等关键信息,甚至关键词收录

了文章中出现的起始位置所以我们有有机会看到关键词“高亮显示”的查询结果页。

  关键词检索的第一步是对整个文档(Document)进行切分,得到文本中的每一个词,这对于英文来说并不难,因为英文句子中的词B是用空格隔开的李开B,但是词十人句中的词组和词组是两个概念,所以中文分词就成了一个大问题。例如,李怎么办。北京*敏*感*词*》?解决这个问题最好的办法就是把中文词库和中文分词方法结合起来,其中比较著名的中文分词方法有IK(IKAnalyzer)或者抛丁(PaodingAnalyzcr),非常方便与开源 Lucene 一起使用。

  Lucene

  Java生态中知名的全文搜索开源项目是Apache Lucene(以下简称Lucene),2001年成为Apache的开源项目,Lucene的原贡献者Doug Cutting是一位资深专家在全文检索领域,曾是V-Twin搜索引擎(苹果Copland操作系统的成果之一)的主要开发者。小程序增加了全文搜索功能。目前Apache官方维护的Lucene相关开源项目如下。

  为了对文档进行索引,Lucene提供了五个基本类,分别是Document、Field、Index Writer、Analyzer和Directory。首先,Document 用于描述要搜索的任何文档,例如 HTML 页面、电子邮件或文本文件。我们知道一个文档可能有多个属性。例如,一封电子邮件具有接收日期、发件人、收件人、电子邮件主题和电子邮件内容等属性。每个属性都可以用一个 Field 对象来描述。另外,我们可以把一个Document对象看成是数据库中的一条记录,每个Field对象就是这条记录的一个字段。其次,在查询一个Document之前,我们需要对文档的内容进行切分,找出文档中收录

的关键字。这部分工作是由Analyzer对象来实现的。Analyzer将分词后的内容发送给IndexWriter建立索引。IndexWriter是Lucene用来创建索引(Index)的核心类之一,用于将每个Document对象添加到索引中,并将索引对象持久化到Directory中。Directory 表示 Lucene 索引的存储位置。目前有两种实现方式:第一种是FSDirectory,表示存放在文件系统中;第二个是RAMDirectory,意思是存放在内存中。

  在了解创建 Lucene 索引所需的类之后,我们可以为任何文档创建索引。下面给出了索引指定文件目录下所有文本文件的源码:

<p>//索引文件目录

Directory indexDir = FSDirectory.open (Paths.get ("index-dir"));Analyzer analyzer = new StandardAnalyzer();

IndexWriterConfig config = new IndexWriterConfig(analyzer);IndexWriter indexWriter = new Indexwriter (indexDir, config);//需要被索引的文件目录

String dataDir=". ";

File[] dataFiles = new File(dataDir).listFiles();long startTime - new Date() .getTime();

for(int i= 0; i

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线