Istio概念-服务间通信和跟踪

时间:2019-11-08 03:45:15

标签: logging kubernetes openshift istio distributed-tracing

编辑:我正在重写这个问题,以缩小评论中建议的范围。

在文档Deploying the application下,

  

要使用Istio运行示例,无需更改应用程序本身。取而代之的是,您只需要在启用Istio的环境中配置和运行服务,并在每个服务旁边注入Envoy辅助工具。

我有一个NodeJS后端API,该API使用winston包写入日志。我认为必须更改应用程序 ,以便Winston包中的日志可以参与分布式跟踪。这是正确的吗?

2 个答案:

答案 0 :(得分:3)

通常,分布式跟踪系统需要在出站请求中添加标头,以告知跟踪系统和跟踪给定请求所属的下游任务。尽管这不是特定于Istio的,但Istio确实记录了需要传递的a list of OpenTracing headers文档。如果您不这样做,那么服务之间的每个调用将显示为单独的跟踪,而不是将它们缝合在一起成为一个统一的端到端跟踪。

这与您的日志记录系统分开。除非您通过HTTP将日志发送到Logstash之类的日志或直接发送到Elasticsearch中,否则日志根本不会显示在跟踪中。不利的一面是,您无需更改日志记录设置中的任何内容即可“与Istio一起使用”,但是主要是因为没有很多直接交互。

答案 1 :(得分:1)

不,您的假设不正确。 Istio跟踪与日志无关。这一切都是由Istio管理并由边车自动修改的自定义标头,以允许处理流量的每个边车在进入(请求)和离开(响应)时放置时间戳。这使您对参与网络调用的容器之间的实际延迟有所了解。

最重要的是,您可以使用一些与您的应用程序语言兼容的OpenTracing兼容库,自由地修改应用程序的代码以包括更详细的方法级跟踪。基本上,除了Winston日志记录外,还添加了一些行,以便也包括代码执行管道的检查点。虽然您可以解析日志并使用日志时间戳通过数学方式对其进行度量,但要实现opentracing已经为您提供的功能,仍然还有很多工作要做。