将日志从Fastly发送到Elasticsearch(日志流式传输)

首先

10月15日,Fastly的博客发布了一篇题为“Fastly的实时日志流支持扩展到Apache Kafka和Elasticsearch”的文章。

在与Fastly进行请求时,可以通过“实时日志流式传输”将日志传输到各种服务中,其中包括向Kafka和Elasticsearch提供日志的功能。

因为目前为止,情况是“有限供应”,所以我们选择了通过请求的方式来启用。

为什么使用Elasticsearch让人感到开心?

通常情况下,在处理CDN的日志时,通常会使用Fastly将日志导出到S3,然后通过插件或任意的脚本将数据从S3加载到Elasticsearch中。
而通过本次Log Streaming的Elasticsearch支持,可以省去数据传输的麻烦,并且基本上可以实时地将数据注入其中。根据Elasticsearch索引的更新频率,日志很快就会以聚合的方式出现在目标位置上,大约在1秒以内。

如果能够实时处理日志…

    • 現状把握、異常検知 が直ぐに行える。問題の発見が早くなるので機会損失を抑えられる

 

    • Elasticsearch/Kibanaの機械学習を駆使して、最新のデータに基づいた予測や分析結果が得られる。サービス側に結果をフィードバックして、最適化サイクルを迅速に回せる

 

    リアルタイムなモニタリング、分析のソリューションは色々あるが、コストもかかる。FastlyとElasticsearchで完結できると、データ反映速度とコストのバランスが良い

我个人是以处理营销数据为前提来使用的。

    • 機械学習、予測、形態素解析 といった機能が組み込まれていて、コーディング無しにUIで構成できる

 

    • Kibanaの可視化は最高! チャートを作ったりダッシュボード化するのはもちろん、Timelionで異なる期間の数値変動を1つのチャートで比較できたり、Canvasを使ってインフォグラフ的な可視化もできてしまう

 

    圧倒的なデータ構造の柔軟性。IngestlyではいくつかのフィールドはJSON文字列としてログに埋込、Elasticsearch上ではフィールドのネストを展開して扱える

试试看。

如果可以将Ingestly的数据发送到Elasticsearch,而不仅仅是发送到BigQuery,那么我认为我们可以构建一个灵活且易于处理的数据结构,就像我以前的工作场所一样,同时使用关系型数据库和NoSQL数据库。为了实现这一点,我立即请求支持进行启用。

スクリーンショット 2019-10-17 9.01.25.png

只需要从电子邮件或支持门户明确提供Fastly的Service ID,并请求激活即可。当然,可以使用日语。

Elasticsearch的设置(假设使用基本身份验证)

创建角色和用户

首先,为了授予权限,我们需要创建一个”Role”。
在”Role”中,重要的是当Fastly写入日志时,如果写入的索引不存在,就需要同时创建索引和写入日志,因此需要”create_index”权限。
另外,还需要手动输入索引名称的模式来指定”Indices”中可以访问的索引,其中可能会包括将来创建的(即目前还不存在的)索引。

如果存在权限不足的情况,您可以在Fastly的用户界面上看到“API错误”,并从Elasticsearch收到401错误等,以了解当前的状况。

スクリーンショット 2019-10-17 1.34.54.png

接下来,我们将创建一个用于连接Elasticsearch的Fastly用户。
请随意创建一个用户,并选择之前定义的角色。

スクリーンショット 2019-10-17 1.35.09.png

请事先将Mapping Template以PUT方式提交。

在Ingestly的情况下,也已将Mapping Template放入存储库以正确处理日志。

将“Mapping Template”提前PUT的决定取决于个人偏好和日志格式的成熟度。
Elasticsearch会自动判断数据类型,但由于它是基于初始记录的类型确定的,所以如果后续的日志类型不匹配,或者字符串和数字的意图相反,那就会很麻烦。

因此,如果能在一定程度上提前指定类型,就可以顺利进行统计。通过使用动态模板,在字段名称匹配方面可以自动处理,因此不需要逐个定义所有字段。

通过合理设置Mapping Template中的副本或分片数量、刷新频率和压缩等设置,可以改善成本效益和性能。根据目标和期望的性能进行调整。(此处不详述细节)

Fastly的设置

前提是Elasticsearch的协作已被激活。

进入Fastly的CONFIGURE选项卡,打开Logging并添加Elasticsearch连接。
配置很简单明了,将日志格式设置为JSON形式,并能内部调用VCL函数。然而,似乎无法进行太复杂的处理。

スクリーンショット 2019-10-17 1.45.27.png

使用BigQuery协同已经使用此日志格式的人可以直接使用相同的日志格式,但为了方便在BigQuery中处理,很多人选择了扁平的结构。由于Elasticsearch可以对字段进行嵌套,因此可以考虑进行改进以更直观地处理。

然后,我们需要指定终端点和认证信息。由于此次是基本认证,我们需要指定用户名和密码。

スクリーンショット 2019-10-17 1.45.59.png

在「Index」部分,您可以指定要写入的索引(即关系型数据库中的表),类似于BigQuery连接,支持按时间分割索引。在Elasticsearch中,当索引变得过大时,性能会下降,所以有时可以采取按天或按小时精细划分索引的策略。即使是来自Fastly的日志流,也可以动态指定索引名称并将其分割成时间序列索引。

您可以使用STRFTIME函数来格式化字符串。

Kibana的设置

为了处理日志,您需要在Kibana中定义索引模式。
由于索引会按时序分割,因此您可以使用通配符来进行部分匹配。

スクリーンショット 2019-10-17 1.55.52.png

只需在用户界面上轻点几下,就能立即进行协作。
我认为与BigQuery相比,更易于理解和查找数据。

总结

    • 有効化はサポートに依頼しましょう

 

    • Fastly側のLog Format、Elasticsearch側のMapping Templateは上手く設計しましょう

 

    • ElasticsearchでRole設定に注意

 

    セットアップも分析もすごく簡単なのでオススメ
bannerAds