常见问题

查看Collector日志

2.5.0.0及以上版本:

查看APM Collector日志:

进入容器

kubectl exec -it tingyun-collector-0 -n tingyun -c apm-collector -- bash

在容器内部执行

cd /opt/tingyun-collector/apm/logs

查看Infra Collector日志:

进入容器

kubectl exec -it tingyun-collector-0 -n tingyun -c infra-collector -- bash

在容器内部执行

cd /opt/tingyun-collector/infra/logs

2.5.0.0以下版本:

进入容器

kubectl exec -it tingyun-collector-0 -n tingyun -- bash

在容器内部执行

# APM Collector日志
cd /opt/tingyun-collector/apm/logs
# Infra Collector日志
cd /opt/tingyun-collector/infra/logs

安装探针都需要什么权限?

安装探针需要 MutatingWebhookConfiguration、ClusterRoleBinding 和 ClusterRole 权限。

  • 嵌入APM探针的原理是通过在集群内安装一个Webhook服务,此Webhook服务拦截Pod启动命令并对指定Pod追加initContainer来嵌入APM探针,安装Webhook服务需要MutatingWebhookConfiguration的权限。

    为了实现限制同一Deployment内Pod嵌码的数量的功能,Webhook服务启动时需要通过Kubernetes API获取集群内已嵌码的Pod信息,获取Pod资源的只读权限,并对探针所属的账号赋权。

    定义资源的读取权限需要ClusterRole的权限,对探针所属的账号赋权需要ClusterRoleBinding的权限。

  • Infra探针集成了监控Kubernetes集群信息的组件,原理是通过Kubernetes API获取集群内的相关信息,而调用Kubernetes API需要特定资源的读取权限,并对探针所属的账号赋权。

    定义资源的读取权限需要ClusterRole的权限,对探针所属的账号赋权需要ClusterRoleBinding的权限。

    为了最小化探针的权限,Infra探针使用ClusterRole权限时仅申请了Pod、Namespace 等实体资源的list watch get只读操作的权限,为了保证可以从探针所在的Pod内部访问kubernetes API server,需要申请tokenreviews和subjectaccessreviews资源的create权限。

缺少相应权限时,会报以下错误:

 Error from server (Forbidden): error when retrieving current configuration of:
 Resource: "admissionregistration.k8s.io/v1beta1, Resource=mutatingwebhookconfigurations", GroupVersionKind: "admissionregistration.k8s.io/v1beta1, Kind=MutatingWebhookConfiguration"
 Name: "tingyun-agent-webhook", Namespace: ""
 from server for: "./agent.yaml": mutatingwebhookconfigurations.admissionregistration.k8s.io "tingyun-agent-webhook" is forbidden: 
 User "limited" cannot get resource "mutatingwebhookconfigurations" in API group "admissionregistration.k8s.io" at the cluster scope

 Error from server (Forbidden): error when retrieving current configuration of:
 Resource: "rbac.authorization.k8s.io/v1, Resource=clusterroles", GroupVersionKind: "rbac.authorization.k8s.io/v1, Kind=ClusterRole"
 Name: "tingyun-k8s-monitor", Namespace: ""
 from server for: "./agent.yaml": clusterroles.rbac.authorization.k8s.io "tingyun-k8s-monitor" is forbidden: 
 User "limited" cannot get resource "clusterroles" in API group "rbac.authorization.k8s.io" at the cluster scope

 Error from server (Forbidden): error when retrieving current configuration of:
 Resource: "rbac.authorization.k8s.io/v1, Resource=clusterrolebindings", GroupVersionKind: "rbac.authorization.k8s.io/v1, Kind=ClusterRoleBinding"
 Name: "tingyun-k8s-monitor", Namespace: ""
 from server for: "./agent.yaml": clusterrolebindings.rbac.authorization.k8s.io "tingyun-k8s-monitor" is forbidden: 
 User "limited" cannot get resource "clusterrolebindings" in API group "rbac.authorization.k8s.io" at the cluster scope

当出现以上错误时,请搜索安装的yaml文件内的管理员权限关键字,并将相关yaml内容交给集群管理员审核执行。

排查APM探针嵌码故障

业务Pod启动失败

查看Pod描述信息是否异常

kubectl describe pod [应用pod名] -n [应用所在的namespace]

查看事件信息是否异常

kubectl get event -n [应用所在的namespace]

查看Pod InitContainer日志

kubectl logs [应用pod名] -c tingyun-oneagent -n [应用所在的namespace]

常见原因:

  • InitContainer报错 exec /bin/sh exec format error ,说明镜像和当前Node CPU架构不一致,

    请检查镜像的CPU架构,如果集群内既有ARM64又有AMD64的Node节点,请开启镜像manifest功能,并上传自适应架构的镜像。

  • Node节点的CPU或内存不足导致启动失败,使用命令 kubectl top node 查看Node资源情况。

  • 加上探针后,进程CPU内存占用会比原来略有增高,可能导致超过yaml描述文件内CPU和内存的limit限制,查看yaml内limit值。

  • 加上探针后,启动时间会变长,可能触发Pod健康检查失败,查看健康检查策略。

业务Pod启动成功,嵌码成功,但业务应用访问故障

常见原因:

  1. 探针启动慢,查看业务应用日志和探针日志。

  2. 探针兼容性有问题,查看业务应用日志和探针日志。

业务Pod启动成功,嵌码失败

APM 探针嵌码分为2个大的阶段:

  1. 将探针镜像文件挂载到应用Pod文件系统。

  2. 应用Pod启动后,应用进程根据语言类型加载探针。

使用以下命令检查应用Pod是否挂载探针镜像文件:

kubectl describe pod [应用pod名] -n [应用所在的namespace] | grep tingyun-oneagent

例如:以下输出为已挂载状态

LD_PRELOAD: /opt/tingyun-oneagent/lib/libinterceptor.so
/opt/tingyun-oneagent from oneagent-volume (rw)

如果未挂载探针镜像文件,请按照步骤1-6排查, 如果已挂载探针镜像文件,请按照步骤7-12排查。

步骤1. 检查基调听云的Pod运行状态。

查看探针Pod状态:
kubectl get pod -n tingyun

输出内容应该类似如下:

NAME                                     READY   STATUS    RESTARTS   AGE
prometheus-deployment-745f9d4d45-2d9pn   3/3     Running   6          7d23h
tingyun-agent-774c78dbd6-7szwh           1/1     Running   2          7d23h
tingyun-collector-0                      1/1     Running   0          7d23h
tingyun-linux-agent-5rhj9                1/1     Running   2          7d23h

tingyun-agent-xxx 的状态应该为Running状态。

如果状态不等于Running,请使用 kubectl describe pod tingyun-agent-xxx -n tingyun 查看pod的描述信息。

通常错误原因包括:镜像源网络不通、镜像CPU架构不匹配(ARM64或AMD64 )、集群内CPU或内存资源不足 等。

查看探针服务状态:
kubectl get svc -n tingyun

输出内容应该类似如下:

NAME                          TYPE        CLUSTER-IP     EXTERNAL-IP   PORT(S)             AGE
tingyun-agent-service         ClusterIP   10.97.250.74   <none>        443/TCP             12d
tingyun-collector-service     ClusterIP   None           <none>        7665/TCP,7666/TCP   12d
tingyun-k8s-monitor-service   NodePort    10.99.2.217    <none>        9090:32019/TCP      12d

列表内应该包含tingyun-agent-service服务和tingyun-collector-service和tingyun-k8s-monitor-service服务

步骤2. 检查需嵌码应用所在Namespace的Label。

kubectl get namespace -L tingyun-injection

输出内容应该类似如下:

NAME              STATUS   AGE   TINGYUN-INJECTION
default           Active   20d   
test              Active   9d    enabled
tingyun           Active   8d

嵌码应用所在Namespace的tingyun-injection标签应该为enabled。

步骤3. 检查需嵌码应用所在Pod的Label。

kubectl describe pod www.tomcat.com-689b69775f-s7tcl -n test

输出内容应该类似如下:

Name:           www.tomcat.com-689b69775f-s7tcl
Namespace:      test
Labels:         tingyun-agent-injected=enabled
Annotations:    tingyun-agent-id: 5022f18b-1944-11ed-b5a0-02427e459e42

嵌码应用所在Pod的tingyun-agent-injected标签应该为enabled

步骤4. 检查Webhook是否存在,或者是否是旧版本的Webhook。

kubectl get MutatingWebhookConfiguration | grep tingyun-agent-webhook

输出内容应该类似如下:

tingyun-agent-webhook   2022-05-08T04:50:33Z

如果没有内容输出说明Webhook安装失败。

如果有内容输出,检查Webhook创建日期,当删除旧版探针重新安装时,可能由于权限原因或遗漏卸载步骤导致Webhook没有更新。

步骤5. 查看webhook运行日志。

kubectl logs tingyun-agent-xxx -n tingyun

tingyun-agent-xxx 的logs应该包含对应Pod的更改记录。

以下为一个Pod启动时正常嵌码的日志:

AdmissionResponse: patch=[{"op":"add","path":"/spec/containers/0/volumeMounts/-","value":{"name":"oneagent-volume","mountPath":"/opt/tingyun-oneagent"}},{"op":"add","path":"/spec/containers/0/env","value":[{"name":"LD_PRELOAD","value":"/opt/tingyun-oneagent/lib/libinterceptor.so"},{"name":"TINGYUN_AGENT_ROOT","value":"/opt/tingyun-oneagent"},{"name":"TINGYUN_K8S_MODE","value":"true"},{"name":"TINGYUN_APP_NAME","value":"www.tomcat.com(test)"},{"name":"TINGYUN_NODE_NAME","valueFrom":{"fieldRef":{"fieldPath":"spec.nodeName"}}},{"name":"TINGYUN_INSTANCE_NAME","valueFrom":{"fieldRef":{"fieldPath":"metadata.name"}}},{"name":"TINGYUN_POD_NAMESPACE","valueFrom":{"fieldRef":{"fieldPath":"metadata.namespace"}}},{"name":"TINGYUN_POD_IP","valueFrom":{"fieldRef":{"fieldPath":"status.podIP"}}}]},{"op":"add","path":"/spec/initContainers","value":[{"name":"tingyun-oneagent","image":"goinline.cn/tingyunagent/oneagent:2.2.0.0","command":["sh"],"args":["-c","tar -xzf oneagent.tar.gz -C /oneagent \u0026\u0026 /oneagent/bin/init"],"env":[{"name":"TINGYUN_LICENSE_KEY","value":"9OgQXob4VGGFFYcm"},{"name":"TINGYUN_COLLECTORS","value":"tingyun-collector.tingyun.svc:7665"},{"name":"TINGYUN_DEFAULT_BUSINESS_SYSTEM","value":"k8scen"},{"name":"TINGYUN_WEBHOOK_SVC","value":"tingyun-agent.tingyun.svc:443"},{"name":"TINGYUN_APP_NAME","value":"www.tomcat.com(test)"},{"name":"TINGYUN_INSTANCE_NAME","valueFrom":{"fieldRef":{"apiVersion":"v1","fieldPath":"metadata.name"}}}],"resources":{"limits":{"cpu":"1","memory":"500Mi"},"requests":{"cpu":"1","memory":"200Mi"}},"volumeMounts":[{"name":"oneagent-volume","mountPath":"/oneagent"}],"terminationMessagePath":"/dev/termination-log","terminationMessagePolicy":"File","imagePullPolicy":"IfNotPresent"}]},{"op":"add","path":"/spec/volumes/-","value":{"name":"oneagent-volume","emptyDir":{}}},{"op":"add","path":"/metadata/annotations","value":{"tingyun-injected-status":"injected"}}]
如果logs内包含大量TLS handshake error from xxx: remote error: tls: bad certificate日志

可能原因:

  • 由于权限原因导致更新探针时Webhook没有更新成功

  • 手工替换过yaml文件的namespace名称,导致无法匹配webhook对应的域名

  • 手工替换过yaml文件的SSL证书,导致证书无法验证通过

解决方案:请重新使用听云报表生成新的yaml,保证报表录入的namespace和实际部署的namespace一致,没有手工修改过证书信息,然后使用集群管理员权限重新安装听云探针。

如果logs除了启动的配置信息以外没有任何其他记录

说明集群的MutatingAdmissionWebhook插件没有启用或Webhook安装失败或配置错误。

  • 检查MutatingAdmissionWebhook插件是否开启。

    集群必须开启MutatingAdmissionWebhook插件,OpenShift 3.x版本上MutatingAdmissionWebhook插件默认是禁用状态,请联系集群管理员确认MutatingAdmissionWebhook插件状态。

    例如:OpenShift 3.11 平台上API-Server日志,显示插件为禁用状态。

    例如:MiniKube 平台上API-Server日志,显示插件为启用状态。

  • 检查Webhook服务是否正常

    找一个包含了wget或curl的业务Pod,验证Webhook 服务工作是否正常:

    kubectl exec -it [应用pod名] -n [应用所在的namespace] -- \
    wget --no-check-certificate https://tingyun-agent-service.tingyun.svc/healthz
    

    kubectl exec -it [应用pod名] -n [应用所在的namespace] -- \
    curl -k -v https://tingyun-agent-service.tingyun.svc/healthz
    

    预期应该出现Connected to tingyun-agent-service.tingyun.svc (10.98.85.228) port 443200 OK的信息,如果不是200状态,请根据curl或wget返回的错误信息确定问题。

    通常访问失败的原因包括:DNS解析失败、无法建立连接等。请联系集群管理员解决DNS和网络问题。

步骤6. 查看Kubernetes集群API-Server的日志。

如果DNS没有问题,仍没有logs记录,需要从Kubernetes集群API-Server的日志中查找关键字tingyun相关的线索。

kubectl logs kube-apiserver-minikube -n kube-system | grep tingyun-agent

例如:可能返回以下错误内容

W1109 16:56:46.147598       1 dispatcher.go:67] Failed calling webhook: failing open tingyun-agent-service.tingyun.svc: 
failed calling admission webhook "tingyun-agent-service.tingyun.svc": 
Post https://tingyun-agent-service.tingyun.svc:443/mutate?timeout=30s: dial tcp 10.84.93.142:443: connect: connection refused

如果kube-system中没有名称为kube-apiserver-xxx的pod,说明Kubenetes集群被定制开发过,需要联系集群管理员确认kube-apiserver的应用及日志路径。

如果kube-system中存在kube-apiserver-xxx pod,但无法获取API-Server的日志,可以ssh到kube-apiserver-xxx所在的Node节点,查看以文件形式存在的logs

例如:

sudo ls -l /var/log/pods/ 
sudo ls -l /var/log/pods/kube-system_kube-apiserver-box_3083cabb3f2a9f1b8072e250c84965cd/kube-apiserver/
sudo cat /var/log/pods/kube-system_kube-apiserver-box_3083cabb3f2a9f1b8072e250c84965cd/kube-apiserver/12.log

步骤7. 查看嵌码应用Pod的描述信息中是否包含tingyun-oneagent。

嵌码应用所在Pod应该包含名为 tingyun-oneagent的Init Container, 应该挂载路径为/opt/tingyun-oneagent的文件系统。

以下为正常嵌码状态的Pod描述信息:

$ kubectl describe pod www.tomcat.com-689b69775f-s7tcl  -n test
Name:           www.tomcat.com-689b69775f-s7tcl
Namespace:      test
Labels:         app=tomcat
                pod-template-hash=689b69775f
                tingyun-agent-injected=true
Annotations:    tingyun-injected-status: injected
Status:         Pending
Controlled By:  ReplicaSet/www.tomcat.com-689b69775f
Init Containers:
  tingyun-oneagent:
    Image:      tingyunagent/oneagent:2.2.0.0
    Command:
      sh
    Args:
      -c
      tar -xzf oneagent.tar.gz -C /oneagent && /oneagent/bin/init
    Environment:
      TINGYUN_LICENSE_KEY:              9OgQXob4VGGFFYcm
      TINGYUN_COLLECTORS:               tingyun-collector.tingyun.svc:7665
      TINGYUN_DEFAULT_BUSINESS_SYSTEM:  k8scen
      TINGYUN_APP_NAME:                 www.tomcat.com(test)
      TINGYUN_INSTANCE_NAME:            www.tomcat.com-689b69775f-s7tcl (v1:metadata.name)
    Mounts:
      /oneagent from oneagent-volume (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-d2gn4 (ro)
Containers:
  tomcat:
    Image:      tomcat
    Port:       80/TCP
    Host Port:  0/TCP
    Environment:
      LD_PRELOAD:             /opt/tingyun-oneagent/lib/libinterceptor.so
      TINGYUN_AGENT_ROOT:     /opt/tingyun-oneagent
      TINGYUN_K8S_MODE:       true
      TINGYUN_APP_NAME:       www.tomcat.com(test)
      TINGYUN_NODE_NAME:       (v1:spec.nodeName)
      TINGYUN_INSTANCE_NAME:  www.tomcat.com-689b69775f-s7tcl (v1:metadata.name)
      TINGYUN_POD_NAMESPACE:  test (v1:metadata.namespace)
      TINGYUN_POD_IP:          (v1:status.podIP)
    Mounts:
      /opt/tingyun-oneagent from oneagent-volume (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-d2gn4 (ro)
Conditions:
  Type           Status
  PodScheduled   False 
Volumes:
  default-token-d2gn4:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-d2gn4
    Optional:    false
  oneagent-volume:
    Type:        EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:      
    SizeLimit:   <unset>

步骤8. 进入到应用容器内部检查/opt/tingyun-oneagent是否挂载成功。

$ kubectl exec -it www.tomcat.com-689b69775f-s7tcl -n test -- bash
Defaulted container "tomcat" out of: tomcat, tingyun-oneagent (init)

# ls /opt/tingyun-oneagent/
agent  bin  conf  data    lib  logs  run

嵌码应用所在的容器内部应该存在/opt/tingyun-oneagent。

步骤9. 进入到应用容器内部检查/opt/tingyun-oneagent/logs/oneagent/preload.log。

cat /opt/tingyun-oneagent/logs/oneagent/preload.log

Java应用的preload日志应该包含 JNI_CreateJavaVM,例如:


2022-05-16 06:05:22.500 98b6065442(pid:9,uid:0) DEBUG App Matched: dirname /usr/local/tomcat/bin/catalina.sh

2022-05-16 06:05:22.505 98b6065442(pid:1,uid:0) DEBUG App Matched: /usr/local/openjdk-11/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start

2022-05-16 06:05:22.517 98b6065442(pid:1,uid:0) INFO on JNI_CreateJavaVM 

2022-05-16 06:05:22.517 98b6065442(pid:1,uid:0) DEBUG Option[0]: --add-opens=java.base/java.lang=ALL-UNNAMED

2022-05-16 06:05:22.517 98b6065442(pid:1,uid:0) DEBUG Option[1]: --add-opens=java.base/java.io=ALL-UNNAMED

2022-05-16 06:05:22.517 98b6065442(pid:1,uid:0) DEBUG Option[2]: --add-opens=java.base/java.util=ALL-UNNAMED

2022-05-16 06:05:22.517 98b6065442(pid:1,uid:0) DEBUG Option[3]: --add-opens=java.base/java.util.concurrent=ALL-UNNAMED

2022-05-16 06:05:22.517 98b6065442(pid:1,uid:0) DEBUG Option[4]: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED

2022-05-16 06:05:22.517 98b6065442(pid:1,uid:0) DEBUG Option[5]: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties

2022-05-16 06:05:22.517 98b6065442(pid:1,uid:0) DEBUG Option[6]: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager

2022-05-16 06:05:22.517 98b6065442(pid:1,uid:0) DEBUG Option[7]: -Djdk.tls.ephemeralDHKeySize=2048

2022-05-16 06:05:22.517 98b6065442(pid:1,uid:0) DEBUG Option[8]: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources

2022-05-16 06:05:22.517 98b6065442(pid:1,uid:0) DEBUG Option[9]: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027

2022-05-16 06:05:22.517 98b6065442(pid:1,uid:0) DEBUG Option[10]: -Dignore.endorsed.dirs=

2022-05-16 06:05:22.517 98b6065442(pid:1,uid:0) DEBUG Option[11]: -Djava.class.path=/usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

2022-05-16 06:05:22.517 98b6065442(pid:1,uid:0) DEBUG Option[12]: -Dcatalina.base=/usr/local/tomcat

2022-05-16 06:05:22.517 98b6065442(pid:1,uid:0) DEBUG Option[13]: -Dcatalina.home=/usr/local/tomcat

2022-05-16 06:05:22.517 98b6065442(pid:1,uid:0) DEBUG Option[14]: -Djava.io.tmpdir=/usr/local/tomcat/temp

2022-05-16 06:05:22.517 98b6065442(pid:1,uid:0) DEBUG Option[15]: -Dsun.java.command=org.apache.catalina.startup.Bootstrap start

2022-05-16 06:05:22.517 98b6065442(pid:1,uid:0) DEBUG Option[16]: -Dsun.java.launcher=SUN_STANDARD

2022-05-16 06:05:22.517 98b6065442(pid:1,uid:0) DEBUG Option[17]: -Dsun.java.launcher.pid=1

步骤10. 进入到应用容器内部检查应用进程是否加载了libinterceptor.so。

应用进程名称依赖语言类型,通常:

  • Java应用的进程名为 java。

  • .NET Core应用的进程名为dotnet。

  • PHP应用的进程名为php-fpm。

# ps -ef | grep java
# cat /proc/[pid]/maps | grep tingyun

应用进程的maps文件内应该包含/opt/tingyun-oneagent/lib/libinterceptor.so。

如果是Java应用,进程的maps文件内应该包含tingyun-agent-java。

例如以下为正常状态:

ps -ef | grep java
root           1       0  1 06:05 ?        00:00:10 /usr/local/openjdk-11/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -Dorg.apache.catalina.security.SecurityListener.UMASK=0027 -Dignore.endorsed.dirs= -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
root          99      85  0 06:17 pts/0    00:00:00 grep java

cat /proc/1/maps | grep tingyun
7fa10807a000-7fa10807b000 r--s 00000000 fd:00 71524153                   /usr/local/tomcat/temp/tingyun-agent-java-bootstrap13874205463106685302.jar
7fa10807b000-7fa10807c000 r--s 00001000 fd:00 71524152                   /usr/local/tomcat/temp/tingyun-agent-inspect-api14972125563454570786.jar
7fa10807c000-7fa10807f000 r--s 0000a000 fd:00 71524151                   /usr/local/tomcat/temp/tingyun-agent-api12248287110149823502.jar
7fa10807f000-7fa108085000 r--s 00029000 fd:00 71524150                   /usr/local/tomcat/temp/tingyun-agent-proxy15757291668964798396.jar
7fa10aba3000-7fa10aba5000 r--p 00000000 fd:00 104907973                  /opt/tingyun-oneagent/lib/libinterceptor.so
7fa10aba5000-7fa10abdb000 r-xp 00002000 fd:00 104907973                  /opt/tingyun-oneagent/lib/libinterceptor.so

步骤11. 进入到应用容器内部检查/opt/tingyun-oneagent/logs/agent/下是否有探针日志文件。

ls -l /opt/tingyun-oneagent/logs/agent/
total 328
-rw-r-----. 1 root root 320328 May 16 06:13 java-agent-98b6065442730569998e3f6c89af916bdab7cb36c8edafe85059a8e57ef4a2e7-1.log
-rw-r-----. 1 root root   5296 May 16 06:05 java-starter-98b6065442730569998e3f6c89af916bdab7cb36c8edafe85059a8e57ef4a2e7-1.log

嵌码应用所在的容器内部应该存在/opt/tingyun-oneagent/logs/agent日志文件。

步骤12. 查看探针日志,是否有和Collector通讯的错误。

vi /opt/tingyun-oneagent/logs/agent/java-agent-98b6065442730569998e3f6c89af916bdab7cb36c8edafe85059a8e57ef4a2e7-1.log

如果业务应用Pod使用了hostNetwork模式,可能导致业务应用Pod由于无法解析collector的集群内域名而通讯失败,此时需要在集群外部独立部署Collector,并修改tingyunagent.yaml内tingyun-injector-configpod-init.sh,将此Pod内的探针配置文件内的Collector地址修改为独立部署Collector的IP。

错误如图:

下面将TINGYUN_APP_NAME名称为host-network-app(default)的应用使用的collector修改为192.168.5.1:7665

# APM探针-探针配置文件
# configmap.yaml
# tingyun-agent 配置项

apiVersion: v1
kind: ConfigMap
metadata:
  name: tingyun-injector-config
  namespace: tingyun
data:
  pod-init.sh: |
    #!/bin/sh
    if [ "${TINGYUN_APP_NAME}" = "host-network-app(default)" ]; then
        sed -i -e "s/collectors=.*/collectors=192.168.5.1:7665/" ${ONEAGENT_CONF}
    fi

然后使用yaml文件更新。

kubectl apply -f tingyunagent.yaml

results matching ""

    No results matching ""