Istio 可观测性之日志,深入了解 Istio 通过 Envoy 来提供访问日志功能

人工智能2025-11-04 00:01:543373

访问日志提供了一种从单个工作负载实例的观测供访角度监控和理解行为的方法,同样访问日志是日志我们在生产环境中必不可少的一种监控手段,Istio 通过 Envoy 来提供访问日志功能,深入Envoy Proxy 打印访问信息到标准输出,通过y提Envoy 容器的问日标准输出能够通过 kubectl logs 命令打印出来。

Istio 能够以一组可配置的志功格式为服务流量生成访问日志,使运维人员可以完全控制日志记录的观测供访方式、内容、日志时间和地点。深入下面是通过y提一个典型的 Istio 访问日志示例:

复制[2023-12-04T06:17:42.719Z] "GET /productpage HTTP/1.1" 200 - via_upstream - "-" 0 5289 23 22 "10.244.0.0" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" "f3a98cd1-6970-42c0-9c86-d179b93aa779" "192.168.0.100:31896" "10.244.1.254:9080" inbound|9080|| 127.0.0.6:45629 10.244.1.254:9080 10.244.0.0:0 outbound_.9080_._.productpage.default.svc.cluster.local default1.

在现在的 Telemetry V2 版本的架构中,访问日志直接通过服务网格的问日数据平面 Envoy 上生成并上报给日志后端。根据后端日志采集方式的志功不同,会有不同的观测供访通道和方式。Envoy 可以通过控制台或者文件输出,日志由各种日志代理采集,深入也可以通过 gRPC 协议直接上报日志给标准的访问日志服务 ALS(Envoy Access Log Service),比如 Skywalking 就支持,一般流程如下所示

Envoy 根据服务网格配置提取应用的访问信息。高防服务器上报访问日志,比如通过 gRPC 协议上报给 ALS 服务。ALS 服务 对接后端,将日志写到 Elasticsearch、Kafka 等后端服务中。通过 Kibanba、Grafana 等工具从后端服务检索日志。

开启 Envoy 访问日志

同样的方式在 Istio 中我们可以通过 MeshConfig 和 Telemetry API 的方式来启用访问日志。如果想通过 MeshConfig 方式来配置,需要在安装配置中添加以下字段(默认已经配置了):

复制spec: meshConfig: accessLogFile: /dev/stdout1.2.3.

或者,在原来的 istioctl install 命令中添加相同的设置,例如:

复制istioctl install <flags-you-used-to-install-Istio> --set meshConfig.accessLogFile=/dev/stdout1.

此外还可以通过设置 accessLogEncoding 为 JSON 或 TEXT 来配置日志的格式。另外还可以设置 accessLogFormat 来自定义访问日志的格式,如果没有指定 accessLogFormat 的话 Istio 将使用以下默认的访问日志格式:

复制[%START_TIME%] \"%REQ(:METHOD)% %REQ(X-ENVOY-ORIGINAL-PATH?:PATH)% %PROTOCOL%\" %RESPONSE_CODE% %RESPONSE_FLAGS% %RESPONSE_CODE_DETAILS% %CONNECTION_TERMINATION_DETAILS% \"%UPSTREAM_TRANSPORT_FAILURE_REASON%\" %BYTES_RECEIVED% %BYTES_SENT% %DURATION% %RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)% \"%REQ(X-FORWARDED-FOR)%\" \"%REQ(USER-AGENT)%\" \"%REQ(X-REQUEST-ID)%\" \"%REQ(:AUTHORITY)%\" \"%UPSTREAM_HOST%\" %UPSTREAM_CLUSTER% %UPSTREAM_LOCAL_ADDRESS% %DOWNSTREAM_LOCAL_ADDRESS% %DOWNSTREAM_REMOTE_ADDRESS% %REQUESTED_SERVER_NAME% %ROUTE_NAME%\n1.2.3.

当然我们还是强烈推荐使用 Telemetry API 来开启或关闭访问日志,如下所示:

复制apiVersion: telemetry.istio.io/v1alpha1 kind: Telemetry metadata: name: mesh-default namespace: istio-system spec: accessLogging: - providers: - name: envoy1.2.3.4.5.6.7.8.9.

上面的示例使用默认的 envoy 访问日志提供程序,当然我们也可以应用于单独的命名空间或单独的工作负载,以在细粒度级别控制日志记录。

Loki

接下来我们来将访问日志发送到 Grafana Loki 进行统一的日志管理,Loki 是云服务器一个水平可扩展、高可用的多租户日志聚合系统。

首先我们需要先确保 Loki 已经安装,我们这里同样只是为了测试,直接使用下面的方式安装即可,如果在生产环境中使用,则需要参考官方文档进行分布式部署。

复制kubectl apply -f samples/addons/loki.yaml -n istio-system1.

由于 Istio 默认并没有直接支持 Loki 这个 Provider,我们可以查看 MeshConfig 的 ExtensionProvider 字段,可以看到 Istio 默认支持的 Provider 有:

字段

类型

描述

是否必需

name

string

必填。用于唯一标识扩展提供商的名称。

envoyExtAuthzHttp

EnvoyExternalAuthorizationHttpProvider (oneof)

配置实现了 Envoy ext_authz 过滤器授权检查服务的外部授权器,使用 HTTP API。

envoyExtAuthzGrpc

EnvoyExternalAuthorizationGrpcProvider (oneof)

配置实现了 Envoy ext_authz 过滤器授权检查服务的外部授权器,使用 gRPC API。

zipkin

ZipkinTracingProvider (oneof)

配置使用 Zipkin API 的跟踪提供商。

datadog

DatadogTracingProvider (oneof)

配置 Datadog 跟踪提供商。

stackdriver

StackdriverProvider (oneof)

配置 Stackdriver 提供商。

skywalking

SkyWalkingTracingProvider (oneof)

配置 Apache SkyWalking 提供商。

opentelemetry

OpenTelemetryTracingProvider (oneof)

配置 OpenTelemetry 跟踪提供商。

prometheus

PrometheusMetricsProvider (oneof)

配置 Prometheus 指标提供商。

envoyFileAccessLog

EnvoyFileAccessLogProvider (oneof)

配置 Envoy 文件访问日志提供商。

envoyHttpAls

EnvoyHttpGrpcV3LogProvider (oneof)

针对 HTTP 流量配置 Envoy 访问日志服务提供商。服务器租用

envoyTcpAls

EnvoyTcpGrpcV3LogProvider (oneof)

针对 TCP 流量配置 Envoy 访问日志服务提供商。

envoyOtelAls

EnvoyOpenTelemetryLogProvider (oneof)

配置 Envoy Open Telemetry 访问日志服务提供商。

没有 Loki 这个 Provider,那么我们需要怎样才能将日志发送到 Loki 中呢?这里我们可以使用 OpenTelemetry 来收集日志,然后再通过 OpenTelemetry Collector 来将日志发送到 Loki 中。

OpenTelemetry

OpenTelemetry(简称 OTel) 是一个开源的可观测框架,用于生成、收集和描述应用程序的观测数据。它提供了一组 API、库、Agent 和 Collector,用于捕获分布式跟踪和度量数据,并将其发送到分析软件、存储库或其他服务,OTel 的目标是提供一套标准化、与厂商无关的 SDK、API 和工具集,用于将数据摄取、转换和发送到可观测性后端(开源或商业厂商)。

OpenTelemetry Collector

OpenTelemetry Collector 提供了一个与厂商无关的实现方式,用于接收、处理和导出遥测数据,它消除了运行、操作和维护多个代理/收集器的需求。

事实上收集器也并不是必需的,有的时候我们可以直接将遥测数据发送到外部的可视化工具中,比如 Jaeger、Zipkin 等等,但是这样的话我们就需要在每个应用中都进行配置,这样的话就会导致配置非常繁琐,而且也不利于统一管理,所以这里我们就可以使用 OpenTelemetry Collector 来解决这个问题。

而且 OpenTelemetry Collector 本身部署起来也非常灵活,可以将其部署为代理或网关。区别在于作为代理时,收集器实例与应用程序在同一主机上运行(sidecar 容器、daemonset 等)。此外一个或多个收集器实例也可以作为独立服务以每个集群、数据中心和地区的网关形式运行。

一般来说建议新应用选择代理部署,现有应用选择网关部署的方式,如果是 Kubernetes 环境,当然更建议部署为守护进程(代理模式)的方式。

收集器由四个组件组成,通过管道(Pipeline)进行启用:

接收器(Receiver)将数据发送到收集器中,可以通过推送或拉取方式发送处理器(Processor)决定如何处理接收到的数据导出器(Exporter)决定将数据发送到哪里,可以通过拉取或推送方式完成,上面代码中的 OTLPTraceExporter 就是一个导出器连接器(Connectors):连接器既是输出者又是接收者。连接器连接两个管道:它作为一个管道末端的导出器消耗数据,并作为另一个管道开始处的接收器发出数据。它可以消耗和发出相同数据类型或不同数据类型的数据。

OTel Collector

当然我们也可以基于社区的组件进行自定义,以增强和扩展收集器管道。例如我们可以创建一个专用的导出器来接收并摄取指标、追踪和日志。

OpenTelemetry Collector 部署

在了解了 OpenTelemetry 的相关概念后,接下来我们需要部署 OpenTelemetry Collector,同样我们直接使用 Istio 提供的 samples 中的配置即可:

复制kubectl apply -f samples/open-telemetry/loki/otel.yaml -n istio-system1.

该命令会部署一个 OpenTelemetry 采集器,其中比较重要的是该采集器的配置:

复制apiVersion: v1 kind: ConfigMap metadata: name: opentelemetry-collector-conf labels: app: opentelemetry-collector data: opentelemetry-collector-config: | receivers: otlp: protocols: grpc: http: processors: batch: attributes: actions: - action: insert key: loki.attribute.labels value: pod, namespace,cluster,mesh exporters: loki: endpoint: "http://loki.istio-system.svc:3100/loki/api/v1/push" logging: loglevel: debug extensions: health_check: service: extensions: - health_check pipelines: logs: receivers: [otlp] processors: [attributes] exporters: [loki, logging]1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.

上面的配置中我们主要关注 exporters 字段,其中 loki 就是我们要将日志发送到的 Loki 服务,endpoint 字段指定了 Loki 服务的地址,这里我们直接使用 Loki 的 Service 名称即可,因为 Loki 服务暴露了 3100 端口,所以我们可以直接使用 http://loki.istio-system.svc:3100/loki/api/v1/push 来访问 Loki 服务。而 receivers 字段表示接收器,这里配置的是 otlp,表示使用 OpenTelemetry 的 OTLP 标准协议来接收数据。processors 字段表示处理器,这里我们使用了 attributes 处理器,它的作用是向日志中添加一些自定义的属性,比如 pod、namespace、cluster、mesh 等等,这样我们在 Loki 中就可以通过这些属性来进行检索了。最后需要注意的是必须要在 service.pipelines 中明确声明要启用的管道以及管道中使用的接收器、处理器和导出器,否则不会生效。

现在在 Istio 根命名空间中包含如下的一些工作负载:

复制$ kubectl get pods -n istio-system NAME READY STATUS RESTARTS AGE grafana-5f9b8c6c5d-jv65v 1/1 Running 16 (5h12m ago) 32d istio-egressgateway-556f6f58f4-mqp5z 1/1 Running 0 4h26m istio-ingressgateway-9c8b9b586-p2w67 1/1 Running 0 4h26m istiod-644f5d55fc-dlktv 1/1 Running 0 4h26m jaeger-db6bdfcb4-9s8lr 1/1 Running 0 3h47m kiali-7c9d5f9f96-cp4mb 1/1 Running 18 (5h12m ago) 32d loki-0 1/1 Running 0 32m opentelemetry-collector-5ccc9c9c55-msg5x 1/1 Running 0 60s prometheus-5d5d6d6fc-lfz87 2/2 Running 2 (5h12m ago) 2d19h1.2.3.4.5.6.7.8.9.10.11.

接下来我们就需要在 Istio 中添加一个 OpenTelemetry 访问日志服务的 Provider,添加如下配置:

复制# iop.yaml apiVersion: install.istio.io/v1alpha1 kind: IstioOperator spec: profile: demo meshConfig: extensionProviders: - name: otel envoyOtelAls: service: opentelemetry-collector.istio-system.svc.cluster.local port: 4317 logFormat: labels: pod: "%ENVIRONMENT(POD_NAME)%" namespace: "%ENVIRONMENT(POD_NAMESPACE)%" cluster: "%ENVIRONMENT(ISTIO_META_CLUSTER_ID)%" mesh: "%ENVIRONMENT(ISTIO_META_MESH_ID)%"1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.

在上面的配置中我们添加了一个名为 otel 的 Provider,该 Provider 是一个 envoyOtelAls,表示使用 OpenTelemetry 的访问日志服务,对应的后端服务为 opentelemetry-collector.istio-system.svc.cluster.local,端口为 4317,这里我们直接使用 OpenTelemetry Collector 的 Service 名称即可。最后我们还配置了 logFormat,表示日志的格式,这里我们添加了一些自定义的属性,比如 pod、namespace、cluster、mesh 等等,然后在 OpenTelemetry 采集器中会把这些属性转换为 Loki 的标签,这样我们在 Loki 中就可以通过这些属性来进行检索了。

直接使用 istioctl 命令来安装配置该对象即可:

复制istioctl install -f iop.yaml -y1.

到这里我们的准备工作就完成了。

使用 Telemetry API 配置访问日志

接下来我们只需要通过 Telemetry API 来启用上面我们配置的日志 Provider 就可以开始收集日志了,如下所示:

复制apiVersion: telemetry.istio.io/v1alpha1 kind: Telemetry metadata: name: mesh-logging-default namespace: istio-system spec: accessLogging: - providers: - name: otel1.2.3.4.5.6.7.8.9.

应用该资源对象后,整个服务网格的日志就都会被上报到 OTel 采集器,然后在 Loki 中就可以看到日志了。

这里我们直接打开 Grafana 的 Loki Dashboard 即可:

复制istioctl dashboard grafana1.

首先要在 Grafana 中添加 Loki 数据源:

Loki 数据源

然后接下来我们去访问 Productpage 应用产生一些日志数据,再切换回到 Grafana 中,切换到 Explore 页面,然后选择 Loki 数据源,就可以看到 Loki 中的日志了:

日志查询

同样的我们还可以使用 Telemetry API 来做一些更加细粒度的配置。

比如可以使用以下配置禁用 sleep 服务的访问日志:

复制apiVersion: telemetry.istio.io/v1alpha1 kind: Telemetry metadata: name: disable-sleep-logging namespace: default spec: selector: matchLabels: app: sleep accessLogging: - providers: - name: otel disabled: true1.2.3.4.5.6.7.8.9.10.11.12.13.

还可以使用 match 字段来指定要过滤的流量,比如可以使用以下配置禁用 httpbin 服务的入站访问日志:

复制apiVersion: telemetry.istio.io/v1alpha1 kind: Telemetry metadata: name: disable-httpbin-logging spec: selector: matchLabels: app: httpbin accessLogging: - providers: - name: otel match: mode: SERVER # 入站模式 disabled: true # 禁用1.2.3.4.5.6.7.8.9.10.11.12.13.14.

此外我们可以通过 CEL 表达式过滤访问日志。只有响应码大于等于 500 时,才会显示访问日志,如下所示:

复制apiVersion: telemetry.istio.io/v1alpha1 kind: Telemetry metadata: name: filter-sleep-logging spec: selector: matchLabels: app: sleep accessLogging: - providers: - name: otel filter: expression: response.code >= 5001.2.3.4.5.6.7.8.9.10.11.12.13.

比如只有响应码大于等于 400 或请求转到 BlackHoleCluster 或 PassthroughCluster 时,才显示访问日志:

复制apiVersion: telemetry.istio.io/v1alpha1 kind: Telemetry metadata: name: default-exception-logging namespace: istio-system spec: accessLogging: - providers: - name: otel filter: expression: "response.code >= 400 || xds.cluster_name == BlackHoleCluster || xds.cluster_name == PassthroughCluster "1.2.3.4.5.6.7.8.9.10.11.

参考文档

https://istio.io/latest/docs/tasks/observability/。https://opentelemetry.io/docs/。
本文地址:http://www.bzve.cn/html/317b9199591.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

热门文章

全站热门

海信65EC780UC电视的功能和性能综合评测(畅享震撼影音体验,高清画质与智能操控一体化)

说明:系统:Ubuntu Server 11.10系统:Windows Server 2003################################################################################################### Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesnt use lo0# Accepts all established inbound connections# Allows all outbound traffic-A OUTPUT -j ACCEPT-A INPUT -p tcp --dport 80 -j ACCEPT-A INPUT -p tcp --dport 873 -j ACCEPT# THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE# Now you should read up on iptables rules and consider whether ssh access# Allow ping# log iptables denied calls (access via dmesg command)# Reject all other inbound - default deny unless explicitly allowed policy:-A FORWARD -j REJECT##################################################################################################ctrl+o #保存ctrl+x #退出备注:873是Rsync端口iptables-restore < /etc/iptables.default.rules #使防火墙规则生效nano /etc/network/if-pre-up.d/iptables #创建文件,添加以下内容,使防火墙开机启动###########################################################!/bin/bashwhereis rsync #查看系统是否已安装rsync,出现下面的提示,说明已经安装ctrl+o #保存log file = /var/log/rsyncd.log #日志文件位置,启动rsync后自动产生这个文件,无需提前创建。/etc/init.d/rsync start #启动Next 下一步Next默认安装路径 C:Program FilescwRsyncInstall 安装Close 安装完成,关闭3、测试是否与Rsync服务端通信成功开始-运行-cmd输入cd C:Program FilescwRsyncbin 回车再输入telnet 192.168.21.168 873 回车出现下面的界面,说明与Rsync服务端通信成功备注 C:Program FilescwRsyncbin 是指cwRsync程序安装路径4、cwRsync客户端同步Rsync服务端的数据开始-运行-cmd,输入cd C:Program FilescwRsyncbin 回车再输入rsync -vzrtopg --progress --delete mysqlbakuser@192.168.21.168::MySQL_Backup /cygdrive/d/mysql_data输入密码:123456 回车出现下面的界面,说明数据同步成功可以打开D:mysql_data 与Rsync服务端/home/mysql_data目录中的数据对比一下,查看是否相同d/mysql_data 代表D:mysql_data192.168.21.168 #Rsync服务端IP地址-vzrtopg --progress #显示同步过程详细信息三、在cwRsync客户端的任务计划中添加批处理脚本文件,每天凌晨3:00钟自动同步Rsync服务端/home/mysql_data目录中的数据到D:mysql_data目录1、打开C:Program FilescwRsyncbin目录,新建passwd.txt输入123456保存继续在C:Program FilescwRsyncbin目录,新建MySQL_Backup.bat输入echo.echo.rsync -vzrtopg --port=873 --progress --delete mysqlbakuser@192.168.21.168::MySQL_Backup /cygdrive/d/mysql_data < passwd.txtecho 数据同步完成echo.最后保存退出2、添加批处理脚本到Windows任务计划开始-设置-控制面板-任务计划打开添加任务计划,下一步浏览,选择打开C:Program FilescwRsyncbin目录里面的MySQL_Backup.bat执行这个任务:选择每天,下一步起始时间:3:00运行这个任务:每天,下一步输入Windows系统管理员的登录密码,下一步完成扩展说明:假如要调整同步的时间,打开任务计划里面的MySQL_Backup切换到日程安排来选项设置,还可以打开高级来设置每隔几分钟运行一次MySQL_Backup.bat这个脚本至此,Ubuntu Server Rsync服务端与Windows cwRsync客户端实现数据同步完成

今天查了一下,squid对dns的支持是这样一个原理: 1、假如dns server发送域名时带有ttl,则以此ttl为准,一般dns server都会带有对ttl的支持,现在我用的dnsmasq默认ttl是0。 2、假如dns server没发送ttl(ttl=0),squid就以自己的配置positive_dns_ttl为准,这个配置默认是6小时。 3、原先squid里配置的一个negative_dns_ttl,证实是配错了,这个配置指的是squid在取不到域名(出错)的情况下会多久再去重取。 我原先的情况是positive_dns_ttl和dns server的ttl都没有配置而配置了negative_dns_ttl,这时squid以默认的positive_dns_ttl为准,即6小时,这个时间对web服务器来说太长了。当前我解决的办法是修改dns server的ttl为60 有些朋友可能是用bind来做的dns,bind可能默认的ttl并不是0,所以用positive_dns_ttl配置不起效的话,修改ttl值就好。 附:检测dns服务器ttl值的方法 在一台linux机器上,修改/etc/resolv.conf将dns指向到要测试的dns,然后执行 dig test.com 假如该dns能解析test.com,就会返回一系列数据,其中有一列指明了ttl值,一试即知。

1、/etc/profile:在登录时,操作系统定制用户环境时使用的第一个文件,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。2、/etc/environment:在登录时操作系统使用的第二个文件,系统在读取你自己的profile前,设置环境文件的环境变量。3、~/.bash_profile:在登录时用到的第三个文件是.profile文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该 文件仅仅执行一次!默认情况下,他设置一些环境变游戏量,执行用户的.bashrc文件。4、/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。5、~/.bashrc:该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。要使设置的环境变量立即生效,使用source命令,例如:复制代码代码如下:复制代码代码如下:sudo ln -sf ~/android/sdk/tools/* /usr/bin/.这样就可以直接执行draw9path之类的命令了

电脑更新后出现错误,如何解决?(应对电脑更新错误的实用指南)

OpenVPN是一个用于创建虚拟专用网络加密通道的软件包,允许创建的VPN使用公开密钥、数字证书、或者用户名/密码来进行身份验证。OpenVPN能在Solaris、Linux、OpenBSD、FreeBSD、NetBSD、Mac OS X与Windows 2000/XP/Vista/7以及Android和iOS上运行,并包含了许多安全性的功能。配置OpenVPN 2.0的第一步是建立一个PKI(public key infrastructure 公钥基础设施)。PKI包括:服务端和每个客户端都有一个证书(也称做公钥)和私钥首先,我们必须安装OpenVPN软件。在Ubuntu 15.04和其它带有‘apt’包管理器的Unix系统中,可以通过如下命令安装:复制代码代码如下:注意: 所有接下来的命令要以超级用户权限执行,如在使用sudo -i命令后执行,或者你可以使用sudo -E作为接下来所有命令的前缀。开始之前,我们需要拷贝“easy-rsa”到openvpn文件夹。然后进入到该目录复制代码代码如下:第三,我们需要加载环境变量,这些变量已经在前面一步中编辑好了。生成密钥的最后一步准备工作是清空旧的证书和密钥,以及生成新密钥的序列号和索引文件。可以通过以下命令完成。复制代码代码如下:在对话中,我们可以看到默认的变量,这些变量是我们先前在“vars”中指定的。我们可以检查一下,如有必要进行编辑,然后按回车几次。对话如下Generating a 2048 bit RSA private key复制代码代码如下:该命令的对话如下:Generating a 2048 bit RSA private key复制代码代码如下:该命令的输出样例如下Generating DH parameters, 2048 bit long safe prime, generator 2复制代码代码如下:现在,生成完毕,我们可以移动所有生成的文件到最后的位置中。最后,我们来创建OpenVPN配置文件。让我们从样例中拷贝过来吧:然后编辑我们需要指定密钥的自定义路径一切就绪。在重启OpenVPN后,服务器端配置就完成了。Unix的客户端配置复制代码代码如下:加载环境变量然后创建客户端密钥我们将看到一个与先前关于服务器密钥生成部分的章节描述一样的对话,填入客户端的实际信息。假如需要密码保护密钥,你需要运行另外一个命令,命令如下在此种情况下,在建立VPN连接时,会提示你输入密码。现在,我们需要将以下文件从服务器拷贝到客户端/etc/openvpn/keys/文件夹。服务器文件列表:ca.crt,复制代码代码如下:在此之后,我们需要重启OpenVPN以接受新配置。好了,客户端配置完成。安卓客户端配置复制代码代码如下:所有这些文件我们必须移动我们设备的SD卡上。然后,我们需要安装一个OpenVPN Connect 应用。接下来,配置过程很是简单:打开 OpenVPN 并选择“Import”选项虽然OpenVPN初始配置花费不少时间,但是简易的客户端配置为我们弥补了时间上的损失,也提供了从任何设备连接的能力。此外,OpenVPN提供了一个很高的安全等级,以及从不同地方连接的能力,包括位于NAT后面的客户端。因此,OpenVPN可以同时在家和企业中使用。

PPPOECONF 是 Linux 平台上连接有线宽带的命令行工具软件,它的历史已经很久远了(我从 07 年开始接触 Linux 的时候就有了)。后来,Linux 的 Gnome 桌面环境中出现了一个叫 Network Manager 的组件,提供了图形化连接有线宽带的方法,PPPOECONF 就再也没有用过。但是今年升级 Ubuntu 15.04 之后,再使用 Network Manager,却一直无法通过虚拟拨号连接有线宽带。没办法,只有再次请出 PPPOECONF 这个老朋友。本经验就介绍一下如何使用 PPPOECONF 连接宽带。1、升级 Ubuntu 15.04 之后,使用 Network Manager 连接有线宽带的虚拟拨号,会出现以下错误,错误信息是:连接启用失败:(1)Creating object for path /org/freedesktop/NetworkManager/ActiveConnection/18 failed in libnm-glib.2、搜索国外论坛,有大神提出了重装 Network Manager 的办法。我试过了,然并卵。3、那就再请 PPPOECONF 这一员老将出山吧。按 Ctrl + Alt + t 组合快捷键,启动终端。4、在命令提示符 $ 后面,键入命令:$ sudo pppoeconf启动 PPPOECONF 的配置向导。在后面的步骤中,假如不明白各个步骤内容是啥意思(我就是不明白的一员嘿嘿),只要选“是”就行了。5、感谢我们的网络服务提供商,我们在这一步骤中选“是”,启用所谓的“经典模式”。6、到了输入宽带拨号用户账号的步骤了,我们按键盘上的 Backspace 删除键,删除图中文本框中预置的 username,然后输入我们自己的账号。7、当然,接下来输入密码:在空白的文本框里直接输入就行了。8、这一步骤的意思是自动获取我们的网络服务提供商分配给我们的 DNS 域名,我们还是选“是”。9、看到这一步骤中的大片文字,我能做的也只能选“是”。10、在这里,假如你只有有线连接而且要一直使用,那就选”是“,让 PPPOECONF 在开机时自动启动;假如只是像我一样偶尔用用有线,那就选”否“,在需要的时候键入命令,去启动 pppoe 虚拟拨号。11、终于接近尾声了。在这里,选“是”会立即启动虚拟拨号并建立连接。我选“否”,等会打命令启动,老长时间没打命令了,过过瘾、受受虐。12、在上一步骤中选否,PPPOECONF 向导结束,回到终端的命令提示符,我输入:$ sudo pon dsl-provider则宽带连接建立;断开有线宽带、回到 WLAN 无线网络环境,则键入:$ sudo poff可以看到,在原来的 NetworkManager 不被删除、不停止运行的前提下,可以随时启动、关闭 PPPOE;也就是说,两者和平共处、互不影响。

什么是Kdump?Kdump 是一种的新的crash dump捕获机制,用来捕获kernel crash时候产生的crash dump。Kdump需要配置两个不同目的的kernel,其中一个我们在这里称作standard(production) kernel;另外一个称之为Crash(capture)kernel。standard(production)kernel,是指我正在使用的kernel,当standard kernel在使用的过程中出现crash的时候, kdump会切换到crash kernel, 简单来说,standard kernel会正运行时发生crash,而crash(capture) Kernel 会被用来捕获production kernel crash时候产生的crash dump。捕获crash dump是在新的crash(capture) kernel 的上下文中来捕获的,而不是在standard kernel上下文进行。具体是当standard kernel方式crash的时候,kdump通过kexec(后面介绍)自动启动进入到crash kernel当中。假如启动了kdump服务,standard kernel会预留一部分内存, 这部分内存用来启动crash kernel。kdump机制主要包括两个组件:kdump和kexec kexec是一个快速启动机制,允许通过已经运行的内核的上下文启动一个Linux内核,不需要经过BIOS。BIOS可能会消耗很多时间,特别是带有众多数量的外设的大型服务器。这种办法可以为经常启动机器的开发者节省很多时间。Kexec是实现kdump机制的关键,它包括2个组成部分:一是内核空间的系统调用kexec_load,负责在生产内核(production kernel 或 first kernel)启动时将捕获内核(capture kernel或sencond kernel)加载到指定地址。二是用户空间的工具kexec-tools,他将捕获内核的地址传递给生产内核,从而在系统崩溃的时候能够找到捕获内核的地址并运行。没有kexec就没有kdump。先有kexec实现了在一个内核中可以启动另一个内核,才让kdump有了用武之地。 kdump是一种先进的基于kexec的内核崩溃转储机制。当系统崩溃时,kdump使用kexec 启动到第二个内核。第二个内核通常叫做捕获内核,以很小内存启动以捕获转储镜像。第一个内核保留了内存的一部分给第二内核启动用。由于kdump利用kexec启动捕获内核,绕过了 BIOS,所以第一个内核的内存得以保留。这是内核崩溃转储的本质。kdump需要两个不同目的的内核,生产内核和捕获内核。生产内核是捕获内核服务的对像。捕获内核会在生产内核崩溃时启动起来,与相应的ramdisk一起组建一个微环境,用以对生产内核下的内存进行收集和转存。注意,在启动时,kdump保留了一定数量的重要的内存,为了计算系统需要的真正最小内存,加上kdump使用的内存数量,以决定真正的最小内存的需求。kexec和kdump的设计区别:Kexec的设计是用新内核去覆盖原内核位置;而KDUMP是预留一块内存来加载第二个内核(和相关数据),Crash后第二个内核在原位置运行(不然就达不到相关目的了),收集第一个内核的相关内存信息。下面开始试验kdump特性: 操作系统:ubuntu 12.10(3.5.0-17-generic)安装kdump工具复制代码代码如下: 发现安装过程中修改了grub,在引导内核配置上(/boot/grub/grub.cfg)多了如下参数复制代码代码如下: crashkernel用来指定保留内存的大小,我们可以知道crashkernel帮我们设定的保留区域的大小是:假如内存小于384M,不保留内存;假如内存大于等于384M但小于2G,保留64M;假如内存大于2G,保留128M。 复制代码代码如下:下载dbgsym文件,改文件是用来吊事内核信息的文件复制代码代码如下: 重启机器使配置生效。复制代码代码如下:kdump-tools配置(kdump-config show):复制代码代码如下:可以通过sysrq强制系统崩溃。 复制代码代码如下: 这造成内核崩溃,如配置有效,系统将重启进入kdump内核,当系统进程进入到启动 kdump服务的点时,(dump.时间戳文件)将会拷贝到你在kdump配置文件中设置的位置。ubuntu的缺省目录是:/var/crash/时间戳文件夹。然后系统重启进入到正常的内核。一旦回复到正常的内核,就可以在上述的目录下发现dump文件,即内存转储文件。可以使用之前安装的crash工具来进行分析。生成dump文件后/var/crash的目录结构:├── 201305061817复制代码代码如下:出现如下错误提示: crash: cannot resolve: xtime,此时crash的版本为5.1.6,版本太低,调试不了3.5的内核,需要升级crash,可以手动安装crash。

热门文章

友情链接

滇ICP备2023006006号-39