Skywalking之Java Agent

1.  部署war包

    1.  上传apache-skywalking-java-agent-8.15.0.tgz

    2.  解压目录到tomcat目录下

        tar -zxvf apache-skywalking-java-agent-8.15.0.tgz -C /usr/local/tomcat/

    3.  修改/usr/local/tomcat/skywalking-agent/config/agent.config

# The group name is optional only.
agent.service_name=${SW_AGENT_NAME:tomcat-backapi}

# The agent namespace
agent.namespace=${SW_AGENT_NAMESPACE:前台}

# Backend service addresses.
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.2.166:11800}

    4.  修改/usr/local/tomcat/bin/catalina.sh

        CATALINA_OPTS="$CATALINA_OPTS -javaagent:/usr/local/tomcat/tomcat-backapi/skywalking-agent/skywalking-agent.jar"; export CATALINA_OPTS          

    5.  重启tomcat

    6.  登录skywalking管理界面,查看对应的服务

2.  部署jar包

    1.  前三步与前面一致

    2.  第四步开始启动jar时,配置对应的参数:

        java -javaagent:/usr/local/tomcat-fms/skywalking-agent/skywalking-agent.jar -jar -Duser.timezone=GMT+8 /usr/local/tomcat-fms/zhen-fms-2.0.0.jar

    3.  登录skywalking管理界面,查看对应的服务

3.  部署Jetty

    1.  前三步与前面一致

    2.  启动参数

        export JAVA_OPTIONS="${JAVA_OPTIONS} -javaagent:/path/to/skywalking-agent/skywalking-agent.jar"

    3.  登录skywalking管理界面,查看对应的服务

4.  Agent运行场景

    1.  Docker       

FROM apache/skywalking-java-agent:8.5.0-jdk8
# ... build your java application      

    2.  Kubernetes

apiVersion: v1
kind: Pod
metadata:
  name: agent-as-sidecar
spec:
  restartPolicy: Never

  volumes:
    - name: skywalking-agent
      emptyDir: { }

  initContainers:
    - name: agent-container
      image: apache/skywalking-java-agent:8.7.0-alpine
      volumeMounts:
        - name: skywalking-agent
          mountPath: /agent
      command: [ "/bin/sh" ]
      args: [ "-c", "cp -R /skywalking/agent /agent/" ]

  containers:
    - name: app-container
      image: springio/gs-spring-boot-docker
      volumeMounts:
        - name: skywalking-agent
          mountPath: /skywalking
      env:
        - name: JAVA_TOOL_OPTIONS
          value: "-javaagent:/skywalking/agent/skywalking-agent.jar"

5.  Agent目录结构介绍

    

    1.  skywalking-agent.jar

        这是skywalking的javaagent入口,也是核心逻辑包

    2.  plugins

        存放skywalking所支持的中间件,框架和库

    3.  optional-plugins

        存放skywalking可选的中间件,框架和库,如果要使用需要手工移动到plugins目录下

        1.  trace-ignore-plugin  

            特点:  过滤被忽略的Endpoint

            模式:  /path/*,/path/**,/path/?

            配置:  拷贝pm-trace-ignore-plugin-x.jar到agent/plugins,重启agent 

            添加路径:  在agent/config目录下,创建一个文件名为apm-trace-ignore-plugin.config,内容如下:

                    trace.ignore_path=/your/path/1/**,/your/path/2/**                     

    4.  config

        存放agent的配置文件agent.config

    5.  activations

        存放用于激活skywalking的应用工具包的插件包

6.  Agent配置参数

agent.service_name=${SW_AGENT_NAME:jar-fms} #服务名称
agent.namespace=${SW_AGENT_NAMESPACE:后台} #命名空间
agent.cluster=${SW_AGENT_CLUSTER:}
agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE:-1} #表示每3秒采集的链路数据,负数或0代表不采集
agent.authentication=${SW_AGENT_AUTHENTICATION:}
agent.trace_segment_ref_limit_per_span=${SW_TRACE_SEGMENT_LIMIT:500}
agent.span_limit_per_segment=${SW_AGENT_SPAN_LIMIT:300}
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.2.166:11800} #指定后端地址
collector.grpc_upstream_timeout=${SW_AGENT_COLLECTOR_GRPC_UPSTREAM_TIMEOUT:30}
collector.get_profile_task_interval=${SW_AGENT_COLLECTOR_GET_PROFILE_TASK_INTERVAL:20}
collector.get_agent_dynamic_config_interval=${SW_AGENT_COLLECTOR_GET_AGENT_DYNAMIC_CONFIG_INTERVAL:20}
collector.is_resolve_dns_periodically=${SW_AGENT_COLLECTOR_IS_RESOLVE_DNS_PERIODICALLY:false}
logging.level=${SW_LOGGING_LEVEL:INFO}
logging.file_name=${SW_LOGGING_FILE_NAME:skywalking-api.log}
logging.output=${SW_LOGGING_OUTPUT:FILE}
logging.dir=${SW_LOGGING_DIR:}
logging.resolver=${SW_LOGGING_RESOLVER:PATTERN}
logging.pattern=${SW_LOGGING_PATTERN:%level %timestamp %thread %class : %msg %throwable}
logging.max_file_size=${SW_LOGGING_MAX_FILE_SIZE:314572800}
logging.max_history_files=${SW_LOGGING_MAX_HISTORY_FILES:-1}
jvm.buffer_size=${SW_JVM_BUFFER_SIZE:600}
jvm.metrics_collect_period=${SW_JVM_METRICS_COLLECT_PERIOD:1}
buffer.channel_size=${SW_BUFFER_CHANNEL_SIZE:5}
buffer.buffer_size=${SW_BUFFER_BUFFER_SIZE:300}

7.  高级特性

    1.  配置覆盖

        一个真实的物理机上可能部署了多个不同业务的实例,这些实例基本上配置都是一致的,只有个别不一致,这个就需要配置覆盖来实现。

        三种配置覆盖方式

          1.  系统属性

              使用skywalking+配置名

              例子:  java -jar -Dskywalking.agent.service_name=skywalking-demo

          2.  探针参数

              在JVM参数后面增加参数配置

              例子:  -javaagent=/path/skywalking-agent.jar=agent.service_name=skywalking-demo,logging.level=debug

              如果选项和选项值包含,或=,需要使用引号

          3.  系统环境变量

              agent.service_name=${SW_AGENT_NAME:Your_application_name}

              如果环境变量中,已经定义了SW_AGENT_NAME,那么就会使用环境变量的值;如果没有,就使用Your_application_name

        覆盖优先级

          探针参数>系统属性>系统环境变量>配置文件          

    2.  自定义配置文件

        1.  如何使用

            java -jar -Dskywalking_config=/path/to/agent.config

            指定你所定义的配置文件,而不是从agent默认位置找            

        2.  覆盖优先级  

            指定的agent配置文件>默认配置文件

    3.  客户端采样

        agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE:-1}  负数或0代表不采样

    4.  TLS

        1.  开启TLS
            下载skywalking的脚本  https://github.com/apache/skywalking/blob/master/tools/TLS/tls_key_generate.sh

            使用这个脚本生成ca.crt,server.crt server.pem

        2.  开启并配置TLS

            agent端:

              将ca.crt放到agent的ca目录下

            服务端:

              将application.yml/core/default的TLS配置如下:              

              gRPCSslEnabled: ${SW_CORE_GRPC_SSL_ENABLED:true}
              gRPCSslKeyPath: ${SW_CORE_GRPC_SSL_KEY_PATH:"/path/to/server.pem"}
              gRPCSslCertChainPath: ${SW_CORE_GRPC_SSL_CERT_CHAIN_PATH:"/path/to/server.crt"}
              gRPCSslTrustedCAPath: ${SW_CORE_GRPC_SSL_TRUSTED_CA_PATH:"/path/to/ca.crt"}

    5.  命名空间

        用于追踪监控系统的隔离

        在配置文件中设置

                                  

    

                        

posted @ 2024-03-04 10:39  奋斗史  阅读(224)  评论(0)    收藏  举报