将日志从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数据库。为了实现这一点,我立即请求支持进行启用。

只需要从电子邮件或支持门户明确提供Fastly的Service ID,并请求激活即可。当然,可以使用日语。
Elasticsearch的设置(假设使用基本身份验证)
创建角色和用户
首先,为了授予权限,我们需要创建一个”Role”。
在”Role”中,重要的是当Fastly写入日志时,如果写入的索引不存在,就需要同时创建索引和写入日志,因此需要”create_index”权限。
另外,还需要手动输入索引名称的模式来指定”Indices”中可以访问的索引,其中可能会包括将来创建的(即目前还不存在的)索引。
如果存在权限不足的情况,您可以在Fastly的用户界面上看到“API错误”,并从Elasticsearch收到401错误等,以了解当前的状况。

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

请事先将Mapping Template以PUT方式提交。
在Ingestly的情况下,也已将Mapping Template放入存储库以正确处理日志。
将“Mapping Template”提前PUT的决定取决于个人偏好和日志格式的成熟度。
Elasticsearch会自动判断数据类型,但由于它是基于初始记录的类型确定的,所以如果后续的日志类型不匹配,或者字符串和数字的意图相反,那就会很麻烦。
因此,如果能在一定程度上提前指定类型,就可以顺利进行统计。通过使用动态模板,在字段名称匹配方面可以自动处理,因此不需要逐个定义所有字段。
通过合理设置Mapping Template中的副本或分片数量、刷新频率和压缩等设置,可以改善成本效益和性能。根据目标和期望的性能进行调整。(此处不详述细节)
Fastly的设置
前提是Elasticsearch的协作已被激活。
进入Fastly的CONFIGURE选项卡,打开Logging并添加Elasticsearch连接。
配置很简单明了,将日志格式设置为JSON形式,并能内部调用VCL函数。然而,似乎无法进行太复杂的处理。

使用BigQuery协同已经使用此日志格式的人可以直接使用相同的日志格式,但为了方便在BigQuery中处理,很多人选择了扁平的结构。由于Elasticsearch可以对字段进行嵌套,因此可以考虑进行改进以更直观地处理。
然后,我们需要指定终端点和认证信息。由于此次是基本认证,我们需要指定用户名和密码。

在「Index」部分,您可以指定要写入的索引(即关系型数据库中的表),类似于BigQuery连接,支持按时间分割索引。在Elasticsearch中,当索引变得过大时,性能会下降,所以有时可以采取按天或按小时精细划分索引的策略。即使是来自Fastly的日志流,也可以动态指定索引名称并将其分割成时间序列索引。
您可以使用STRFTIME函数来格式化字符串。
Kibana的设置
为了处理日志,您需要在Kibana中定义索引模式。
由于索引会按时序分割,因此您可以使用通配符来进行部分匹配。

只需在用户界面上轻点几下,就能立即进行协作。
我认为与BigQuery相比,更易于理解和查找数据。
总结
-
- 有効化はサポートに依頼しましょう
-
- Fastly側のLog Format、Elasticsearch側のMapping Templateは上手く設計しましょう
-
- ElasticsearchでRole設定に注意
- セットアップも分析もすごく簡単なのでオススメ