mirror of https://github.com/istio/istio.io.git
[zh] improve request-routing component-logging (#13465)
Signed-off-by: xin.li <xin.li@daocloud.io>
This commit is contained in:
parent
048e5f5906
commit
657b73905b
|
@ -10,17 +10,24 @@ owner: istio/wg-user-experience-maintainers
|
|||
test: no
|
||||
---
|
||||
|
||||
Istio 组件使用一个灵活的日志框架来构建,该框架提供了许多功能和控件去帮助操作这些组件并促进诊断,在启动组件的时候,可以通过在命令行传递参数来控制这些日志记录功能。
|
||||
Istio 组件使用一个灵活的日志框架来构建,该框架提供了许多功能和控件去帮助操作这些组件并促进诊断,
|
||||
在启动组件的时候,可以通过在命令行传递参数来控制这些日志记录功能。
|
||||
|
||||
## 记录范围{#logging-scopes}
|
||||
## 日志作用域 {#logging-scopes}
|
||||
|
||||
组件输出的日志信息按 `作用域` 分类,一个作用域代表可以被控制的相关日志信息的整体。根据组件提供的功能,不同的组件具有不同的作用域。所有组件都有 `default` 作用域,该作用域用于未分类的日志信息。
|
||||
组件输出的日志信息按**作用域**分类,一个作用域代表可以被控制的相关日志信息的整体。
|
||||
根据组件提供的功能,不同的组件具有不同的作用域。所有组件都有 `default` 作用域,
|
||||
该作用域用于未分类的日志信息。
|
||||
|
||||
例如,截至目前,`istioctl` 有 25 个作用域,代表命令中的不同功能区域:
|
||||
|
||||
- `ads`, `adsc`, `all`, `analysis`, `authn`, `authorization`, `ca`, `cache`, `cli`, `default`, `installer`, `klog`, `mcp`, `model`, `patch`, `processing`, `resource`, `source`, `spiffe`, `tpath`, `translator`, `util`, `validation`, `validationController`, `wle`
|
||||
- `ads`、`adsc`、`all`、`analysis`、`authn`、`authorization`、
|
||||
`ca`、`cache`、`cli`、`default`、`installer`、`klog`、`mcp`、
|
||||
`model`、`patch`、`processing`、`resource`、`source`、`spiffe`、
|
||||
`tpath`、`translator`、`util`、`validation`、`validationController`、
|
||||
`wle`
|
||||
|
||||
Pilot、Citadel 和 Galley 具有它们自己的范围,您可以通过查看它们的[参考文档](/zh/docs/reference/commands/)来获取更多信息。
|
||||
Pilot、Citadel 和 Galley 具有它们自己的作用域,您可以通过查看它们的[参考文档](/zh/docs/reference/commands/)来获取更多信息。
|
||||
|
||||
每个作用域都有一个唯一的输出级别,为下列其中之一:
|
||||
|
||||
|
@ -30,7 +37,8 @@ Pilot、Citadel 和 Galley 具有它们自己的范围,您可以通过查看
|
|||
1. info
|
||||
1. debug
|
||||
|
||||
其中 `none` 不产生任何输出信息,并且 `debug` 产生的输出信息最多。所有作用域的默认级别是 `info`,为在正常情况下使用 Istio 提供大量的日志信息。
|
||||
其中 `none` 不产生任何输出信息,并且 `debug` 产生的输出信息最多。所有作用域的默认级别是
|
||||
`info`,为在正常情况下使用 Istio 提供大量的日志信息。
|
||||
|
||||
要控制输出级别,也可以在命令行使用 `--log_output_level` 选项。例如:
|
||||
|
||||
|
@ -38,20 +46,28 @@ Pilot、Citadel 和 Galley 具有它们自己的范围,您可以通过查看
|
|||
$ istioctl analyze --log_output_level klog:none,cli:info
|
||||
{{< /text >}}
|
||||
|
||||
除了从命令行控制输出级别外,您也可以使用 [ControlZ](/zh/docs/ops/diagnostic-tools/controlz) 界面控制一个运行组件的输出级别。
|
||||
除了从命令行控制输出级别外,您也可以使用 [ControlZ](/zh/docs/ops/diagnostic-tools/controlz)
|
||||
界面控制一个运行组件的输出级别。
|
||||
|
||||
## 控制输出{#controlling-output}
|
||||
## 控制输出 {#controlling-output}
|
||||
|
||||
日志信息通常发送到组件的标准输出。`--log_target` 选项可以定向输出到许多不同的位置。您可以使用一个逗号分隔列表中的文件系统路径,以及分别表示标准输出和标准错误输出流的特殊值 `stdout` 和 `stderr` 。
|
||||
日志信息通常发送到组件的标准输出。`--log_target` 选项可以定向输出到许多不同的位置。
|
||||
您可以使用一个逗号分隔列表中的文件系统路径,以及分别表示标准输出和标准错误输出流的特殊值
|
||||
`stdout` 和 `stderr` 。
|
||||
|
||||
日志信息通常以友好的格式输出。`--log_as_json` 选项可用于将输出强制转换为 JSON 格式,以便于更简单地被工具处理。
|
||||
日志信息通常以友好的格式输出。`--log_as_json` 选项可用于将输出强制转换为 JSON 格式,
|
||||
以便于更简单地被工具处理。
|
||||
|
||||
## 日志轮转{#log-rotation}
|
||||
## 日志轮转 {#log-rotation}
|
||||
|
||||
Istio 组件可以自动管理日志的轮转,将庞大的日志分解为较小的日志文件。`--log_rotate` 选项可以让您基于文件名进行轮转。派生名称将用于单个日志文件。
|
||||
Istio 组件可以自动管理日志的轮转,将庞大的日志分解为较小的日志文件。`--log_rotate`
|
||||
选项可以让您基于文件名进行轮转。派生名称将用于单个日志文件。
|
||||
|
||||
`--log_rotate_max_age` 选项可以在日志文件被轮转前指定最大天数,然而 `--log_rotate_max_size` 选项可以指定文件轮转之前的最大 size (以兆字节为单位)。最后,`--log_rotate_max_backups` 选项可以控制要保留的最大轮转文件数,较旧的文件将被自动删除。
|
||||
`--log_rotate_max_age` 选项可以在日志文件被轮转前指定最大天数,然而
|
||||
`--log_rotate_max_size` 选项可以指定文件轮转之前的最大 size (以兆字节为单位)。
|
||||
最后,`--log_rotate_max_backups` 选项可以控制要保留的最大轮转文件数,较旧的文件将被自动删除。
|
||||
|
||||
## 组件调试{#component-debugging}
|
||||
## 组件调试 {#component-debugging}
|
||||
|
||||
`--log_caller` 和 `--log_stacktrace_level` 选项可以控制日志信息是否包括程序员级别的信息。当您试着查找组件中的错误信息时它是有用的,但是,通常在日常操作中不使用。
|
||||
`--log_caller` 和 `--log_stacktrace_level` 选项可以控制日志信息是否包括程序员级别的信息。
|
||||
当您试着查找组件中的错误信息时它是有用的,但是,通常在日常操作中不使用。
|
||||
|
|
|
@ -13,30 +13,36 @@ test: yes
|
|||
|
||||
{{< boilerplate gateway-api-gamma-support >}}
|
||||
|
||||
## 开始之前{#before-you-begin}
|
||||
## 开始之前 {#before-you-begin}
|
||||
|
||||
* 按照[安装指南](/zh/docs/setup/)中的说明安装 Istio。
|
||||
|
||||
* 部署 [Bookinfo](/zh/docs/examples/bookinfo/) 示例应用程序。
|
||||
|
||||
* 查看[流量管理](/zh/docs/concepts/traffic-management)的概念文档。在尝试此任务之前,您应该熟悉一些重要的术语,例如 *Destination Rule*、*Virtual Service* 和 *Subset*。
|
||||
* 查看[流量管理](/zh/docs/concepts/traffic-management)的概念文档。在尝试此任务之前,
|
||||
您应该熟悉一些重要的术语,例如 **Destination Rule**、**Virtual Service** 和 **Subset**。
|
||||
|
||||
## 关于这个任务{#about-this-task}
|
||||
## 关于这个任务 {#about-this-task}
|
||||
|
||||
Istio [Bookinfo](/zh/docs/examples/bookinfo/) 示例包含四个独立的微服务,每个微服务都有多个版本。其中一个微服务 `reviews` 的三个不同版本已经部署并同时运行。为了说明这导致的问题,在浏览器中访问 Bookinfo 应用程序的 `/productpage` 并刷新几次。
|
||||
URL 是 `http://$GATEWAY_URL/productpage`,
|
||||
`$GATEWAY_URL` 是 Ingress 的外部访问 IP 地址,正如在 [Bookinfo](/zh/docs/examples/bookinfo/#determine-the-ingress-ip-and-port) 文档中所解释的那样。
|
||||
Istio [Bookinfo](/zh/docs/examples/bookinfo/) 示例包含四个独立的微服务,
|
||||
每个微服务都有多个版本。其中一个微服务 `reviews` 的三个不同版本已经部署并同时运行。
|
||||
为了说明这导致的问题,在浏览器中访问 Bookinfo 应用程序的 `/productpage` 并刷新几次。
|
||||
URL 是 `http://$GATEWAY_URL/productpage`,`$GATEWAY_URL` 是 Ingress 的外部访问 IP 地址,
|
||||
正如在 [Bookinfo](/zh/docs/examples/bookinfo/#determine-the-ingress-ip-and-port)
|
||||
文档中所解释的那样。
|
||||
|
||||
您会注意到,有时书评的输出包含星级评分,有时则不包含。这是因为没有明确的默认服务版本可路由,Istio 将以循环方式将请求路由到所有可用版本。
|
||||
您会注意到,有时书评的输出包含星级评分,有时则不包含。这是因为没有明确的默认服务版本可路由,
|
||||
Istio 将以循环方式将请求路由到所有可用版本。
|
||||
|
||||
此任务的最初目标是应用将所有流量路由到微服务的 `v1` (版本 1)的规则。稍后,您将应用规则根据 HTTP 请求 header 的值路由流量。
|
||||
此任务的最初目标是应用将所有流量路由到微服务的 `v1` (版本 1)的规则。稍后,您将应用规则根据
|
||||
HTTP 请求 header 的值路由流量。
|
||||
|
||||
## 路由到版本 1{#route-to-version-1}
|
||||
## 路由到版本 1 {#route-to-version-1}
|
||||
|
||||
要仅路由到一个版本,请应用为微服务设置默认版本的 Virtual Service。
|
||||
|
||||
{{< warning >}}
|
||||
如果尚未定义服务版本, 请按照[定义服务版本](/zh/docs/examples/bookinfo/#define-the-service-versions)中的说明进行操作。
|
||||
如果尚未定义服务版本,请按照[定义服务版本](/zh/docs/examples/bookinfo/#define-the-service-versions)中的说明进行操作。
|
||||
{{< /warning >}}
|
||||
|
||||
1. 运行以下命令以创建路由规则:
|
||||
|
@ -195,19 +201,23 @@ status:
|
|||
|
||||
您已将 Istio 配置为路由到 Bookinfo 微服务的 `v1` 版本,最重要的是 `reviews` 服务的版本 1。
|
||||
|
||||
## 测试新的路由配置{#test-the-new-routing-configuration}
|
||||
## 测试新的路由配置 {#test-the-new-routing-configuration}
|
||||
|
||||
您可以通过再次刷新 Bookinfo 应用程序的 `/productpage` 轻松测试新配置。
|
||||
在浏览器中打开 Bookinfo 站点。网址为 `http://$GATEWAY_URL/productpage`,其中 `$GATEWAY_URL` 是外部的入口 IP 地址,如 [Bookinfo](/zh/docs/examples/bookinfo/#determine-the-ingress-IP-and-port) 文档中所述。
|
||||
请注意,无论您刷新多少次,页面的评论部分都不会显示评级星标。这是因为您将 Istio 配置为将评论服务的所有流量路由到版本 `reviews:v1`,而此版本的服务不访问星级评分服务。
|
||||
在浏览器中打开 Bookinfo 站点。网址为 `http://$GATEWAY_URL/productpage`,其中
|
||||
`$GATEWAY_URL` 是外部的入口 IP 地址,如 [Bookinfo](/zh/docs/examples/bookinfo/#determine-the-ingress-IP-and-port)
|
||||
文档中所述。请注意,无论您刷新多少次,页面的评论部分都不会显示评级星标。这是因为您将 Istio
|
||||
配置为将评论服务的所有流量路由到版本 `reviews:v1`,而此版本的服务不访问星级评分服务。
|
||||
|
||||
您已成功完成此任务的第一部分:将流量路由到服务的某一个版本。
|
||||
|
||||
## 基于用户身份的路由{#route-based-on-user-identity}
|
||||
## 基于用户身份的路由 {#route-based-on-user-identity}
|
||||
|
||||
接下来,您将更改路由配置,以便将来自特定用户的所有流量路由到特定服务版本。在这种情况下,来自名为 Jason 的用户的所有流量将被路由到服务 `reviews:v2`。
|
||||
接下来,您将更改路由配置,以便将来自特定用户的所有流量路由到特定服务版本。在这种情况下,
|
||||
来自名为 Jason 的用户的所有流量将被路由到服务 `reviews:v2`。
|
||||
|
||||
请注意,Istio 对用户身份没有任何特殊的内置机制。事实上,`productpage` 服务在所有到 `reviews` 服务的 HTTP 请求中都增加了一个自定义的 `end-user` 请求头,从而达到了本例子的效果。
|
||||
请注意,Istio 对用户身份没有任何特殊的内置机制。事实上,`productpage` 服务在所有到
|
||||
`reviews` 服务的 HTTP 请求中都增加了一个自定义的 `end-user` 请求头,从而达到了本例子的效果。
|
||||
|
||||
Istio 还支持在入口网关上基于强认证 JWT 的路由,参考 [JWT 基于声明的路由](/zh/docs/tasks/security/authentication/jwt-route)
|
||||
|
||||
|
@ -291,15 +301,19 @@ EOF
|
|||
|
||||
您已成功配置 Istio 以根据用户身份路由流量。
|
||||
|
||||
## 理解原理{#understanding-what-happened}
|
||||
## 理解原理 {#understanding-what-happened}
|
||||
|
||||
在此任务中,您首先使用 Istio 将 100% 的请求流量都路由到了 Bookinfo 服务的 `v1` 版本。然后设置了一条路由规则,它根据 `productpage` 服务发起的请求中的 `end-user` 自定义请求头内容,选择性地将特定的流量路由到了 `reviews` 服务的 `v2` 版本。
|
||||
在此任务中,您首先使用 Istio 将 100% 的请求流量都路由到了 Bookinfo 服务的 `v1` 版本。
|
||||
然后设置了一条路由规则,它根据 `productpage` 服务发起的请求中的 `end-user` 自定义请求头内容,
|
||||
选择性地将特定的流量路由到了 `reviews` 服务的 `v2` 版本。
|
||||
|
||||
请注意,Kubernetes 中的服务,如本任务中使用的 Bookinfo 服务,必须遵守某些特定限制,才能利用到 Istio 的 L7 路由特性优势。参考 [Pod 和 Service 需求](/zh/docs/ops/deployment/requirements/)了解详情。
|
||||
请注意,Kubernetes 中的服务,如本任务中使用的 Bookinfo 服务,必须遵守某些特定限制,才能利用到
|
||||
Istio 的 L7 路由特性优势。参考 [Pod 和 Service 需求](/zh/docs/ops/deployment/requirements/)了解详情。
|
||||
|
||||
在[流量转移](/zh/docs/tasks/traffic-management/traffic-shifting)任务中,您将按照在此处学习到的相同的基本模式来配置路由规则,以逐步将流量从服务的一个版本迁移到另一个版本。
|
||||
在[流量转移](/zh/docs/tasks/traffic-management/traffic-shifting)任务中,
|
||||
您将按照在此处学习到的相同的基本模式来配置路由规则,以逐步将流量从服务的一个版本迁移到另一个版本。
|
||||
|
||||
## 清除{#cleanup}
|
||||
## 清除 {#cleanup}
|
||||
|
||||
1. 删除应用程序的路由规则:
|
||||
|
||||
|
|
Loading…
Reference in New Issue