前言 🔜什么是SkyWalking?🔚
是一款优秀的国产 APM 工具。
分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。
提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。
SkyWalking架构分为UI、OAP、存储、探针4部分。
其中UI为SkyWalking UI :负责提供控台、查看链路等等;(可视化显示)
OAP为SkyWalking OAP :负责接收 Agent(探针) 发送的 Tracing 数据信息,然后进行分析 (Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query )功能。(数据分析)
存储 为Tracing 数据存储。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多种存储器。而我们目前采用的是 ES ,主要考虑是 SkyWalking 开发团队自己的生产环境采用 ES 为主。(存储数据)
探针为 Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 数据,传递给服务器。(收集数据)
环境准备 (1)使用脚本安装docker、docker-compose
1 bash <(curl -sSL https://linuxmirrors.cn/docker.sh)
(2)配置镜像加速
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 vi /etc/docker/daemon.json { "data-root" : "/data/dockerData" , "registry-mirrors" : [ "https://registry.cn-hangzhou.aliyuncs.com" , "https://huecker.io" , "https://docker.rainbond.cc" , "https://dockerhub.timeweb.cloud" , "https://dockerhub.icu" , "https://docker.registry.cyou" , "https://docker-cf.registry.cyou" , "https://dockercf.jsdelivr.fyi" , "https://docker.jsdelivr.fyi" , "https://dockertest.jsdelivr.fyi" , "https://mirror.aliyuncs.com" , "https://dockerproxy.com" , "https://mirror.baidubce.com" , "https://docker.m.daocloud.io" , "https://docker.nju.edu.cn" , "https://docker.mirrors.sjtug.sjtu.edu.cn" , "https://docker.mirrors.ustc.edu.cn" , "https://mirror.iscas.ac.cn" , "https://docker.rainbond.cc" , "https://docker.kubesre.xyz" ] , "log-driver" : "json-file" , "log-opts" : { "max-size" : "50m" , "max-file" : "3" } }
(3)启动docker服务
1 2 3 systemctl start docker systemctl enable docker systemctl status docker
(4)设置与内存映射相关的内核参数为262144,查看应用到系统的内核参数。
1 2 echo "vm.max_map_count=262144" >> /etc/sysctl.conf sysctl -p
部署步骤 (1)创建部署文件所需的存储目录
1 2 mkdir -p /data/elasticsearch/data /data/elasticsearch/logs /data/skywalking/oap chmod -R 777 /data/elasticsearch
(2)创建临时skywalking-oap-server容器,将skywalking配置文件拷贝到映射目录中。
1 2 3 4 5 cd /data/skywalking/oap # 创建临时skywalking-oap-server容器,拷贝skywalking配置文件到主机目录 docker run -itd --name=oap-temp apache/skywalking-oap-server:9.5.0 docker cp oap-temp:/skywalking/config/. . docker rm -f oap-temp
(3)修改skywalking的配置文件application.yml,将elasticsearch作为数据存储。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 vi application.yml storage: selector: ${SW_STORAGE:elasticsearch} #将h2修改为elasticsearch elasticsearch: namespace: ${SW_NAMESPACE:""} clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:本机ip:9200} #localhost修改为主机ip protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"} connectTimeout: ${SW_STORAGE_ES_CONNECT_TIMEOUT:3000} socketTimeout: ${SW_STORAGE_ES_SOCKET_TIMEOUT:30000} responseTimeout: ${SW_STORAGE_ES_RESPONSE_TIMEOUT:15000} numHttpClientThread: ${SW_STORAGE_ES_NUM_HTTP_CLIENT_THREAD:0} user: ${SW_ES_USER:"elastic"} #填写es的账号 password: ${SW_ES_PASSWORD:"elastic"} #填写es密码 trustStorePath: ${SW_STORAGE_ES_SSL_JKS_PATH:""} trustStorePass: ${SW_STORAGE_ES_SSL_JKS_PASS:""}
(4)创建docker-compose文件,编排部署skywalking、es、skywalking-ui。
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 vi skywalking.yml services: elasticsearch: image: elasticsearch:8.15.0 container_name: elasticsearch restart: always environment: - discovery.type=single-node - ES_JAVA_OPTS=-Xms1g -Xmx1g - ELASTIC_PASSWORD=elastic - TZ=Asia/Shanghai ports: - "9200:9200" - "9300:9300" healthcheck: test: [ "CMD-SHELL" , "curl --silent --fail -u elastic:elasitc localhost:9200/_cluster/health || exit 1" ] interval: 30s timeout: 10s retries: 3 start_period: 10s logging: driver: "json-file" options: max-size: "50m" max-file: "3" volumes: - /data/elasticsearch/data:/usr/share/elasticsearch/data - /data/elasticsearch/logs:/usr/share/elasticsearch/logs - /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins networks: skywalking-network: ipv4_address: 172.20 .110 .11 ulimits: memlock: soft: -1 hard: -1 skywalking-oap: image: apache/skywalking-oap-server:9.5.0 container_name: skywalking-oap restart: always ports: - "11800:11800" - "12800:12800" - "1234:1234" healthcheck: test: [ "CMD-SHELL" , "/skywalking/bin/swctl health" ] interval: 30s timeout: 10s retries: 3 start_period: 10s depends_on: elasticsearch: condition: service_healthy environment: - SW_STORAGE=elasticsearch - SW_HEALTH_CHECKER=default - TZ=Asia/Shanghai - JVM_Xms=512M - JVM_Xmx=1024M - SW_STORAGE_ES_CLUSTER_NODES=本机ip:9200 volumes: - /data/skywalking/oap:/skywalking/config networks: skywalking-network: ipv4_address: 172.20 .110 .12 skywalking-ui: image: apache/skywalking-ui:9.5.0 container_name: skywalking-ui restart: always environment: - SW_OAP_ADDRESS=http://本机ip:12800 - SW_ZIPKIN_ADDRESS=http://本机ip:9412 - TZ=Asia/Shanghai ports: - "8080:8080" depends_on: skywalking-oap: condition: service_healthy networks: skywalking-network: ipv4_address: 172.20 .110 .13 networks: skywalking-network: driver: bridge ipam: config: - subnet: 172.20 .110 .0 /24
1 docker compose -f skywalking.yml up -d
Skywalking可通过以下两种方式连接es,作为存储。(使用其中一种即可)
Skywalking 通过 HTTP认证连接 Elasticsearch
1 2 3 4 5 # 关闭es的ssl证书认证 docker exec -it elasticsearch bash -c ' sed -i "s/ enabled: true/ enabled: false/g" /usr/share/elasticsearch/config/elasticsearch.yml' docker exec -it elasticsearch bash -c 'cat /usr/share/elasticsearch/config/elasticsearch.yml' docker restart elasticsearch docker restart skywalking-oap
Skywalking 通过 HTTPS SSL 认证连接 Elasticsearch
(1)将es的crt和key证书文件,转化为p12格式
1 openssl pkcs12 -export -in ca.crt -inkey ca.key -out es.p12 -name esca -CAfile es.crt
输入两次keypass,其中-name参数为别名。
openssl pkcs12 -export -in ca.crt -inkey ca.key -out es.p12 -name esca -CAfile es.crt Enter Export Password: Verifying - Enter Export Password:
(2)将p12格式证书转化为jks证书
安装JDK。keytool
是 JDK 中的一部分,需要安装JDK,进行证书转化操作。
1 yum install - java-11-openjdk-devel
storepass 参数为jks证书密码,srcstorepass参数为p12证书密码。
1 keytool -importkeystore -v -srckeystore es.p12 -srcstoretype PKCS12 -srcstorepass wasd2345 -deststoretype JKS -destkeystore es.jks -storepass qiswasd2345
storage: selector: ${SW_STORAGE:elasticsearch} elasticsearch: namespace: ${SW_NAMESPACE:””} clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:es所在服务器地址:443 } protocol: 443${SW_STORAGE_ES_HTTP_PROTOCOL:”https “} connectTimeout: ${SW_STORAGE_ES_CONNECT_TIMEOUT:3000} socketTimeout: ${SW_STORAGE_ES_SOCKET_TIMEOUT:30000} responseTimeout: ${SW_STORAGE_ES_RESPONSE_TIMEOUT:15000} numHttpClientThread: ${SW_STORAGE_ES_NUM_HTTP_CLIENT_THREAD:0} user: ${SW_ES_USER:”es用户名 “} password: ${SW_ES_PASSWORD:”es密码 “} trustStorePath: ${SW_STORAGE_ES_SSL_JKS_PATH:”jks证书地址 “} trustStorePass: </mark>${SW_STORAGE_ES_SSL_JKS_PASS:”jks证书密码 “}
开启Linux监控 安装Prometheus node-exporter从 VM 收集指标数据。(源码方式) 1 2 3 4 5 6 7 yum install -y wget wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz tar -xvzf node_exporter-1.8.2.linux-amd64.tar.gz cd mv node_exporter-1.8.2.linux-amd64/node_exporter /usr/sbin/ cd /usr/sbin/ ./node_exporter
验证是否运行
1 curl http://localhost:9100/metrics
创建node_exporter服务文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 vi /usr/lib/systemd/system/node_exporter.service [Unit] Description=node exporter service Documentation=https://prometheus.io After=network.target [Service] Type=simple User=root Group=root # node_exporter的存放位置 ExecStart=/usr/sbin/node_exporter Restart=on-failure [Install] WantedBy=multi-user.target
重新加载系统管理器配置文件,启动node_exporter服务并设置开机自启
1 2 3 4 systemctl daemon-reload systemctl start node_exporter systemctl enable node_exporter systemctl status node_exporter
安装Prometheus node-exporter(容器方式) 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 services: node-exporter: image: quay.io/prometheus/node-exporter container_name: node-exporter volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - '--path.procfs=/host/proc' - '--path.rootfs=/rootfs' - '--path.sysfs=/host/sys' restart: always environment: - TZ=Asia/Shanghai ports: - 9100 :9100 networks: linux_exporter: ipv4_address: 172.20 .104 .11 networks: linux_exporter: driver: bridge ipam: config: - subnet: 172.20 .104 .0 /24
安装 OpenTelemetry Collector 创建OpenTelemetry Collector配置文件
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 mkdir /data/opentelemetry-collector vi /data/opentelemetry-collector/config.yaml receivers: prometheus: config: scrape_configs: - job_name: 'vm-monitoring' #要与skywalking-oap中的otel-rules的vm.yaml中的名称保持一致 scrape_interval: 5s static_configs: - targets: ['10.10.2.145:9100'] labels: host_name: 10.10.2.145 service: oap-server processors: batch: exporters: otlp: endpoint: 10.10.2.145:11800 tls: insecure: true logging: loglevel: debug service: pipelines: metrics: receivers: [prometheus] processors: [batch] exporters: [otlp, logging]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 services: otelcol: image: otel/opentelemetry-collector container_name: otelcol restart: always environment: - TZ=Asia/Shanghai volumes: - /data/opentelemetry-collector/config.yaml:/etc/otelcol/config.yaml networks: opentelemetry: ipv4_address: 172.20 .101 .11 networks: opentelemetry: driver: bridge ipam: config: - subnet: 172.20 .101 .0 /24
opentelemetry-collector最新镜像配置文件变更
在最新版的容器镜像中(0.113.0)中使用导出器exporters中使用debug代替logging。
即在v0.86.0版本之前使用logging
1 2 3 4 5 6 7 exporters: otlp: endpoint: ip+端口 tls: insecure: true logging: loglevel: debug
之后使用debug
1 2 3 4 5 6 7 exporters: otlp: endpoint: ip+端口 tls: insecure: true debug: verbosity: detailed
SkyWalking服务自监控开启 开启后端遥测,在skywalking-oap的配置文件application.yml中,找到promethus的部分,修改参数。
1 2 3 4 5 6 7 8 9 telemetry: selector: ${SW_TELEMETRY:prometheus} #将none修改为prometheus none: prometheus: host: ${SW_TELEMETRY_PROMETHEUS_HOST:0.0.0.0} port: ${SW_TELEMETRY_PROMETHEUS_PORT:1234} sslEnabled: ${SW_TELEMETRY_PROMETHEUS_SSL_ENABLED:false} sslKeyPath: ${SW_TELEMETRY_PROMETHEUS_SSL_KEY_PATH:""} sslCertChainPath: ${SW_TELEMETRY_PROMETHEUS_SSL_CERT_CHAIN_PATH:""}
在OpenTelemetry Collector配置文件中加入自监控的参数
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 36 37 38 39 40 41 42 43 44 45 46 47 receivers: prometheus: config: scrape_configs: - job_name: 'vm-monitoring' scrape_interval: 5s static_configs: - targets: ['10.10.2.145:9100' ] labels: host_name: 10.10 .2 .145 service: skywalking-oap-server prometheus/2: config: scrape_configs: - job_name: 'skywalking-so11y' scrape_interval: 5s static_configs: - targets: ['10.10.2.145:1234' ] labels: host_name: 10.10 .2 .145_self service: skywalking-oap processors: batch: batch/2: exporters: otlp: endpoint: 10.10 .2 .145 :11800 tls: insecure: true logging: loglevel: debug otlp/2: endpoint: 10.10 .2 .145 :11800 tls: insecure: true logging/2: loglevel: debug service: pipelines: metrics: receivers: [prometheus , prometheus/2 ] processors: [batch , batch/2 ] exporters: [otlp , otlp/2 , logging , logging/2 ]
依次重启otelcol容器和skywalking-oap,查看是否生成自监控。
开启数据库MySQL/MariaDB监控 (1)部署mysqld_exporter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 services: mysqld_exporter: image: prom/mysqld-exporter container_name: mysqld_exporter restart: always environment: - TZ=Asia/Shanghai ports: - "9104:9104" command: - "--mysqld.username=user:password" - "--mysqld.address=10.10.2.145:3306" networks: sw-mysql: ipv4_address: 172.20 .102 .11 networks: sw-mysql: driver: bridge ipam: config: - subnet: 172.20 .102 .0 /24
(2) 在OpenTelemetry Collector配置文件中mysql的监控参数
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 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 receivers: prometheus: config: scrape_configs: - job_name: 'vm-monitoring' scrape_interval: 5s static_configs: - targets: ['10.10.2.145:9100' ] labels: host_name: 10.10 .2 .145 service: skywalking-oap-server prometheus/2: config: scrape_configs: - job_name: 'skywalking-so11y' scrape_interval: 5s static_configs: - targets: ['10.10.2.145:1234' ] labels: host_name: 10.10 .2 .145_self service: skywalking-oap prometheus/3: config: scrape_configs: - job_name: 'mysql-monitoring' scrape_interval: 5s static_configs: - targets: ['10.10.2.145:9104' ] labels: host_name: mariadb-monitoring processors: batch: batch/2: batch/3: exporters: otlp: endpoint: 10.10 .2 .145 :11800 tls: insecure: true logging: loglevel: debug otlp/2: endpoint: 10.10 .2 .145 :11800 tls: insecure: true logging/2: loglevel: debug otlp/3: endpoint: 10.10 .2 .145 :11800 tls: insecure: true logging/3: loglevel: debug service: pipelines: metrics: receivers: - prometheus - prometheus/2 - prometheus/3 processors: - batch - batch/2 - batch/3 exporters: - otlp - otlp/2 - otlp/3 - logging - logging/2 - logging/3
依次重启otelcol容器和skywalking-oap,查看是否生成mysql或mariadb的监控数据。
开启Elasticsearch监控 (1)部署elasticsearch_exporter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 services: elasticsearch_exporter: image: quay.io/prometheuscommunity/elasticsearch-exporter:latest container_name: elasticsearch_exporter restart: always environment: - TZ=Asia/Shanghai ports: - "9114:9114" command: - '--es.uri=https://elastic:elastic@10.10.2.145:9200' - "--es.ssl-skip-verify" networks: es_exporter: ipv4_address: 172.20 .103 .11 networks: es_exporter: driver: bridge ipam: config: - subnet: 172.20 .103 .0 /24
(2)在OpenTelemetry Collector配置文件中es的监控参数
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 receivers: prometheus: config: scrape_configs: - job_name: 'elasticsearch-monitoring' scrape_interval: 5s static_configs: - targets: ['10.10.2.145:9114' ] labels: host_name: elasticsearch-monitoring processors: batch: exporters: otlp: endpoint: 10.10 .2 .145 :11800 tls: insecure: true logging: loglevel: debug service: pipelines: metrics: receivers: - prometheus processors: - batch exporters: - otlp - logging
依次重启otelcol容器和skywalking-oap,查看是否生成es的监控数据。
开启数据库PostgreSQL监控 (1)部署postgres-exporter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 services: postgres-exporter: image: quay.io/prometheuscommunity/postgres-exporter container_name: postgres-exporter restart: always environment: TZ: "Asia/Shanghai" DATA_SOURCE_URI: "localhost:5432/postgres?sslmode=disable" DATA_SOURCE_USER: "postgres" DATA_SOURCE_PASS: "password" ports: - "9187:9187" networks: sw-pgsql: ipv4_address: 172.20 .105 .11 networks: sw-pgsql: driver: bridge ipam: config: - subnet: 172.20 .105 .0 /24
(2)在OpenTelemetry Collector配置文件中postgres sql的监控参数
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 receivers: prometheus: config: scrape_configs: - job_name: 'postgresql-monitoring' scrape_interval: 5s static_configs: - targets: ['10.10.2.145:9187' ] labels: host_name: postgresql-monitoring processors: batch: exporters: otlp: endpoint: 10.10 .2 .145 :11800 tls: insecure: true logging: loglevel: debug service: pipelines: metrics: receivers: - prometheus processors: - batch exporters: - otlp - logging
依次重启skywalking-oap容器和otelcol,查看是否生成postgres sql的监控数据。
开启数据库MongoDB监控 (1)部署mongodb_exporter
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 services: mongodb_exporter: image: percona/mongodb_exporter:0.40 container_name: mongodb_exporter restart: always ports: - "9216:9216" environment: - TZ=Asia/Shanghai - MONGODB_URI=mongodb://user:password@192.168.1.23:27017/?authSource=admin command: - --collect-all - --web.listen-address=:9216 networks: sw-mongodb: ipv4_address: 172.20 .106 .11 networks: sw-mongodb: driver: bridge ipam: config: - subnet: 172.20 .106 .0 /24
(2)在OpenTelemetry Collector配置文件中mongodb的监控参数
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 receivers: prometheus: config: scrape_configs: - job_name: 'mongodb-monitoring' scrape_interval: 5s static_configs: - targets: ['10.10.2.145:9216' ] labels: host_name: mongodb-monitoring processors: batch: exporters: otlp: endpoint: 10.10 .2 .145 :11800 tls: insecure: true logging: loglevel: debug service: pipelines: metrics: receivers: - prometheus processors: - batch exporters: - otlp - logging
.NET项目服务链路追踪 安装 SkyWalking .NET Core Agent(Windows环境) (1)在Visual Studio中的项目中安装nuget
包SkyAPM.Agent.AspNetCore
。
(2)在launchSettings.json
文件中新增环境变量"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "SkyAPM.Agent.AspNetCore"
和 "SKYWALKING__SERVICENAME": "服务名(与执行的dll程序的名称一致)"
。
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 36 37 "profiles" : { "http" : { "commandName" : "Project" , "dotnetRunMessages" : true , "launchBrowser" : true , "applicationUrl" : "http://localhost:5205" , "environmentVariables" : { "ASPNETCORE_ENVIRONMENT" : "Development" , "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES" : "SkyAPM.Agent.AspNetCore" , "SKYWALKING__SERVICENAME" : "服务名(与执行的dll程序的名称一致)" } } , "https" : { "commandName" : "Project" , "dotnetRunMessages" : true , "launchBrowser" : true , "applicationUrl" : "https://localhost:7105;http://localhost:5205" , "environmentVariables" : { "ASPNETCORE_ENVIRONMENT" : "Development" , "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES" : "SkyAPM.Agent.AspNetCore" , "SKYWALKING__SERVICENAME" : "服务名(与执行的dll程序的名称一致)" } } , "IIS Express" : { "commandName" : "IISExpress" , "launchBrowser" : true , "environmentVariables" : { "ASPNETCORE_ENVIRONMENT" : "Development" , "ASPNETCORE_HOSTINGSTARTUPASSEMBLIES" : "SkyAPM.Agent.AspNetCore" , "SKYWALKING__SERVICENAME" : "服务名(与执行的dll程序的名称一致)" } } } ,
(3)在Program.cs中添加配置参数。
1 2 3 4 5 builder.Services.AddSkyApmExtensions(); Environment.SetEnvironmentVariable ("ASPNETCORE_HOSTINGSTARTUPASSEMBLIES" , "SkyAPM.Agent.AspNetCore" ); Environment.SetEnvironmentVariable("SKYWALKING__SERVICENAME" , "服务名(与执行的dll程序的名称一致)" );
(4)添加skyapm.json文件,添加方式有两种:
一是在dll运行程序的同目录下创建skyapm.json,并写入以下内容。
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 { "SkyWalking" : { "ServiceName" : "服务名(与执行的dll程序的名称一致)" , "Namespace" : "" , "HeaderVersions" : [ "sw8" ] , "Sampling" : { "SamplePer3Secs" : -1 , "Percentage" : -1.0 } , "Logging" : { "Level" : "Information" , "FilePath" : "logs\\skyapm-{Date}.log" } , "Transport" : { "Interval" : 3000 , "ProtocolVersion" : "v8" , "QueueSize" : 30000 , "BatchSize" : 3000 , "gRPC" : { "Servers" : "SkyWalking服务ip:11800" , "Timeout" : 10000 , "ConnectTimeout" : 10000 , "ReportTimeout" : 600000 , "Authentication" : "" } } } }
二是在Visual Studio的控制台中输入命令创建skyapm.json。
1 2 dotnet tool install -g SkyAPM.DotNet.CLI dotnet skyapm config 服务名(与执行的dll程序的名称一致) SkyWalking服务ip:11800
(5)配置完成后,在运行的服务器中加入环境变量
方式一:在服务器添加
1 2 3 4 5 6 7 8 9 10 vi ~/.bashrc export ASPNETCORE_ENVIRONMENT=development export ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=SkyAPM.Agent.AspNetCore export SKYWALKING__SERVICENAME=服务名 #使得配置生效 source ~/.bashrc
方式二:在容器中添加,可在Dockerfile文件中添加
1 2 3 4 5 6 7 FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base ...... ENV ASPNETCORE_ENVIRONMENT=development ENV ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=SkyAPM.Agent.AspNetCore ENV SKYWALKING__SERVICENAME=服务名 #容器入口点 ENTRYPOINT ["dotnet", "xxx"]
(6)访问.NET项目,查看Skywalking中常规服务-服务中生成的服务监控。(效果图在最后)
安装 SkyWalking .NET Core Agent(Linux环境) 适用于在Linux上创建的.NET项目
(1)安装 SkyWalking .NET Core Agent
1 2 3 dotnet add package SkyAPM.Agent.AspNetCore export ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=SkyAPM.Agent.AspNetCore export SKYWALKING__SERVICENAME=服务名(与执行的dll程序的名称一致)
(2)安装SkyAPM.DotNet.CLI,用于生成skyapm.json
1 2 dotnet tool install -g SkyAPM.DotNet.CLI dotnet skyapm config 服务名(与执行的dll程序的名称一致) SkyWalking服务ip:11800
(3)配置完成后,在运行的服务器中加入环境变量
方式一:在服务器添加
1 2 3 4 5 6 7 8 9 10 vi ~/.bashrc export ASPNETCORE_ENVIRONMENT=development export ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=SkyAPM.Agent.AspNetCore export SKYWALKING__SERVICENAME=服务名 #使得配置生效 source ~/.bashrc
方式二:在容器中添加,可在Dockerfile文件中添加
1 2 3 4 5 6 7 FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base ...... ENV ASPNETCORE_ENVIRONMENT=development ENV ASPNETCORE_HOSTINGSTARTUPASSEMBLIES=SkyAPM.Agent.AspNetCore ENV SKYWALKING__SERVICENAME=服务名 #容器入口点 ENTRYPOINT ["dotnet", "xxx"]
(4)访问.NET项目,查看Skywalking中常规服务-服务中生成的服务监控。
接入前端监控 (1)项目中添加skywalking-client-js包
1 npm install skywalking-client-js --save
(2)在vue.config.js中配置代理
1 2 3 4 5 6 7 8 9 10 proxy: { '/browser': { target: 'SkyWalking服务ip: 12800 ', changeOrigin: true } , '/v3': { target: 'SkyWalking服务ip: 12800 ', changeOrigin: true } }
(3)在main.js中接入skywalking-client-js
1 2 3 4 5 6 7 8 9 10 import ClientMonitor from 'skywalking-client-js'; ClientMonitor.register({ service: '服务名', serviceVersion: '', traceSDKInternal: true , pagePath: location.href, useFmp: true } );
(4)在对应业务系统的服务器中,在对应发布nignx代理服务中加入对应的代理配置。
1 2 3 4 5 6 7 8 location /browser/ { proxy_pass http: client_max_body_size 1000 M; } location /v3/ { proxy_pass http: client_max_body_size 1000 M; }