在写之前先记录一个小tip,skywalking不仅可以监控微服务的应用,对于老的服务,比如war包部署在tomcat的都是可以监控到的,但是需要修改插件,文中第三部分会提到,有使用到的可以参考。
官方文档连接:Documentation | Apache SkyWalkinghttps://skywalking.apache.org/docs
搭建服务
1.下载skywalking安装包
下载的时候需要注意,如果要使用服务日志上送功能,必须下载8.5之后的版本,8.5之前的不支持日志功能,控制台的那个service点不动。
2.目录讲解
可以简单看下目录讲解 因为后续使用会用到,比如命令行增加agent的时候会读取agent包同目录下的配置文件等。
3.设置配置文件 config/application.yml
这个配置文件主要修改持久化数据源的相关配置,我这里修改为mysql。
storage:
# 修改存储引擎为mysql
selector: ${SW_STORAGE:mysql}
……
mysql:
properties:
# 修改ip和数据库
jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest"}
# 修改用户名
dataSource.user: ${SW_DATA_SOURCE_USER:root}
修改密码
dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root}
……
skywalking支持的插拔式的数据源,有H2,mysql,elasticsearch等。
文章开头提到的监控老服务的插件在apache-skywalking-apm-bin\agent\bootstrap-plugins 目录下,包名为apm-jdk-http-plugin-8.5.0,将此包赋值到plugins文件夹下在启动即可监控老服务,我这里struts服务请求都是可以监控的,原理其实就是链路打标是在请求中放到请求头中的,skywalking官方文档写了几种支持的请求方式,对于老的请求不能直接支持的,也提供了插件进行监控,所以进行上述操作之后即可正常监控老服务。
4.下载MySQL连接jar
下载链接:mysql-connector-java-5.1.49.jar--对应mysql版本
将jar包放在oap-libs目录下即可,如果没有连接jar包,会抛如下异常:日志文件路径在logs下
Failed to get driver instance for jdbcUrl=jdbc:mysql://localhost:3306/swtest
No suitable driver
5.启动服务
6.测试
7.如果是jar包服务 启动命令增加 如下命令
-javaagent:E:\BaiduNetdiskDownload\apache-skywalking-apm-bin\agent\skywalking-agent.jar -Dskywalking.agent.service_name=admin -Dskywalking.collector.backend_service=localhost:11800`
需要注意的 是skywalking-agent.jar包所在的文件夹需要有对应的插件和配置文件等 ,可以直接将skywalking安装路径下的此文件夹复制过去,配置文件如下
包括注册名称,skywalking地址,数据库连接等配置信息。
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# The agent namespace
# agent.namespace=${SW_AGENT_NAMESPACE:default-namespace}
# The service name in UI
agent.service_name=${SW_AGENT_NAME:payservice}
# The number of sampled traces per 3 seconds
# Negative or zero means off, by default
# agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE:-1}
# Authentication active is based on backend setting, see application.yml for more details.
# agent.authentication = ${SW_AGENT_AUTHENTICATION:xxxx}
# The max amount of spans in a single segment.
# Through this config item, SkyWalking keep your application memory cost estimated.
# agent.span_limit_per_segment=${SW_AGENT_SPAN_LIMIT:150}
# Ignore the segments if their operation names end with these suffix.
# agent.ignore_suffix=${SW_AGENT_IGNORE_SUFFIX:.jpg,.jpeg,.js,.css,.png,.bmp,.gif,.ico,.mp3,.mp4,.html,.svg}
# If true, SkyWalking agent will save all instrumented classes files in `/debugging` folder.
# SkyWalking team may ask for these files in order to resolve compatible problem.
# agent.is_open_debugging_class = ${SW_AGENT_OPEN_DEBUG:true}
# If true, SkyWalking agent will cache all instrumented classes files to memory or disk files (decided by class cache mode),
# allow other javaagent to enhance those classes that enhanced by SkyWalking agent.
# agent.is_cache_enhanced_class = ${SW_AGENT_CACHE_CLASS:false}
# The instrumented classes cache mode: MEMORY or FILE
# MEMORY: cache class bytes to memory, if instrumented classes is too many or too large, it may take up more memory
# FILE: cache class bytes in `/class-cache` folder, automatically clean up cached class files when the application exits
# agent.class_cache_mode = ${SW_AGENT_CLASS_CACHE_MODE:MEMORY}
# The operationName max length
# Notice, in the current practice, we don't recommend the length over 190.
# agent.operation_name_threshold=${SW_AGENT_OPERATION_NAME_THRESHOLD:150}
# If true, skywalking agent will enable profile when user create a new profile task. Otherwise disable profile.
# profile.active=${SW_AGENT_PROFILE_ACTIVE:true}
# Parallel monitor segment count
# profile.max_parallel=${SW_AGENT_PROFILE_MAX_PARALLEL:5}
# Max monitor segment time(minutes), if current segment monitor time out of limit, then stop it.
# profile.duration=${SW_AGENT_PROFILE_DURATION:10}
# Max dump thread stack depth
# profile.dump_max_stack_depth=${SW_AGENT_PROFILE_DUMP_MAX_STACK_DEPTH:500}
# Snapshot transport to backend buffer size
# profile.snapshot_transport_buffer_size=${SW_AGENT_PROFILE_SNAPSHOT_TRANSPORT_BUFFER_SIZE:50}
# Backend service addresses.
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.121.117:11800}
# Logging file_name
logging.file_name=${SW_LOGGING_FILE_NAME:skywalking-api.log}
# Logging level
logging.level=${SW_LOGGING_LEVEL:INFO}
# Logging dir
# logging.dir=${SW_LOGGING_DIR:""}
# Logging max_file_size, default: 300 * 1024 * 1024 = 314572800
# logging.max_file_size=${SW_LOGGING_MAX_FILE_SIZE:314572800}
# The max history log files. When rollover happened, if log files exceed this number,
# then the oldest file will be delete. Negative or zero means off, by default.
# logging.max_history_files=${SW_LOGGING_MAX_HISTORY_FILES:-1}
# Listed exceptions would not be treated as an error. Because in some codes, the exception is being used as a way of controlling business flow.
# Besides, the annotation named IgnoredException in the trace toolkit is another way to configure ignored exceptions.
# statuscheck.ignored_exceptions=${SW_STATUSCHECK_IGNORED_EXCEPTIONS:}
# The max recursive depth when checking the exception traced by the agent. Typically, we don't recommend setting this more than 10, which could cause a performance issue. Negative value and 0 would be ignored, which means all exceptions would make the span tagged in error status.
# statuscheck.max_recursive_depth=${SW_STATUSCHECK_MAX_RECURSIVE_DEPTH:1}
# Mount the specific folders of the plugins. Plugins in mounted folders would work.
plugin.mount=${SW_MOUNT_FOLDERS:plugins,activations}
plugin.toolkit.log.grpc.reporter.server_host=${SW_GRPC_LOG_SERVER_HOST:192.168.121.117}
plugin.toolkit.log.grpc.reporter.server_port=${SW_GRPC_LOG_SERVER_PORT:11800}
plugin.toolkit.log.grpc.reporter.max_message_size=${SW_GRPC_LOG_MAX_MESSAGE_SIZE:10485760}
plugin.toolkit.log.grpc.reporter.upstream_timeout=${SW_GRPC_LOG_GRPC_UPSTREAM_TIMEOUT:30}
# Exclude activated plugins
# plugin.exclude_plugins=${SW_EXCLUDE_PLUGINS:}
# mysql plugin configuration
# plugin.mysql.trace_sql_parameters=${SW_MYSQL_TRACE_SQL_PARAMETERS:false}
# Kafka producer configuration
# plugin.kafka.bootstrap_servers=${SW_KAFKA_BOOTSTRAP_SERVERS:localhost:9092}
# Match spring bean with regex expression for classname
# plugin.springannotation.classname_match_regex=${SW_SPRINGANNOTATION_CLASSNAME_MATCH_REGEX:}
8、tomcat配置监控
在catalina.sh行首加入
CATALINA_OPTS="$CATALINA_OPTS -javaagent:/opt/agent85/agent/skywalking-agent.jar"
但是要记得这个skywalking-agent.jar包同目录下一定要有config配置, 可以直接将skywalking安装路径下的此文件夹复制过去。
9.样例展示
日志
拓扑
链路