共计 6832 个字符,预计需要花费 18 分钟才能阅读完成。
Apache Skywalking(Incubator)简介
当企业应用进入分布式微服务时代,应用服务依赖会越来越多,skywalking 可以很好的解决服务调用链路追踪的问题,而且基于 Java 探针技术,基本对应用零侵入零耦合。
Apache Skywalking(Incubator) 专门为微服务架构和云原生架构系统而设计并且支持分布式链路追踪的 APM 系统,即应用性能监控系统,为微服务架构和云原生架构系统设计。它通过探针自动收集所需的指标,并进行分布式追踪。通过这些调用链路以及指标,Skywalking APM 会感知应用间关系和服务间关系,并进行相应的指标统计。目前支持链路追踪和监控应用组件如下,基本涵盖主流框架和容器,如国产 PRC Dubbo 和 motan 等,国际化的 spring boot,spring cloud 都支持了。Apache Skywalking (Incubating)目前支持多种语言,其中包括 Java,.Net Core,Node.js 和 Go 语言。
skywalaking 总体架构分为三部分
- skywalking-collector:链路数据归集器,数据可以落地 ElasticSearch,单机也可以落地 H2,不推荐,H2 仅作为临时演示用
- skywalking-web:web 可视化平台,用来展示落地的数据
- skywalking-agent:探针,用来收集和发送数据到归集器
Apache Skywalking(Incubator)共提供两种部署模式:单节点模式和集群模式,以下为单节点模式部署步骤。
依赖第三方组件
- JDK8+
- Mysql5.6 (不推荐)
- ElasticSearch: 6.x
环境配置
- skywalking-collector 服务:192.168.1.100
- skywalking-web 服务:192.168.1.101
- ES 集群:192.168.1.102
安装 ES 集群(推荐)
安装详情,见 https://www.linuxidc.com/Linux/2019-08/159732.htm
安装 MySQL 数据库(不推荐)
wget http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
sudo yum -y localinstall mysql-community-release-el6-*.noarch.rpm
yum install mysql-server mysql-client libmysqlclient-dev
/etc/init.d/mysqld start
mysql_secure_installation #MySQL 安全配置向导
Enter current password for root (enter for none): <–初次运行直接回车
Set root password? [Y/n] <– 是否设置 root 用户密码,输入 y 并回车或直接回车
Remove anonymous users? [Y/n] <– 是否删除匿名用户, 生产环境建议删除,所以直接回车
Disallow root login remotely? [Y/n] <–是否禁止 root 远程登录, 根据自己的需求选择 Y / n 并回车, 建议禁止
Remove test database and access to it? [Y/n] <– 是否删除 test 数据库, 直接回车
Reload privilege tables now? [Y/n] <– 是否重新加载权限表,直接回车
// 修改配置文件
cat /etc/my.cnf
---------------------------------------------------------------------------------
[mysqld]
port=3319
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysqld/mysqld.pid
innodb_large_prefix=on
innodb_file_format=Barracuda
# time zone
default-time-zone=system
character-set-server=utf8
default-storage-engine=InnoDB
skip-name-resolve
skip-symbolic-links
skip-external-locking
skip-slave-start
# res settings
back_log=128
max_connections=100
max_connect_errors=2000
#open_files_limit=10240
connect-timeout=10
wait-timeout=28800
interactive-timeout=28800
innodb_thread_concurrency=0 #不限制并发
# slow query log
slow_query_log=1
long-query-time=3 #慢查询时间
slow_query_log_file=/data/logs/mysql/slow.log
log-warnings=1
log-error=/data/logs/mysql/mysql.err
log_output=FILE
general_log=1
general_log_file=/data/logs/mysql/mysql.log
max_binlog_size=1G
max_relay_log_size=1G
innodb_additional_mem_pool_size=16M
innodb_buffer_pool_instance=2
innodb_buffer_pool_size=256M
innodb_file_io_threads=4
innodb_flush_log_at_trx_commit=2
innodb_log_buffer_size=5M
innodb_log_file_size=100M
innodb_log_files_in_group=2
innodb_log_group_home_dir=/data/mysql/var/
innodb_old_blocks_pct=20
innodb_buffer_pool_dump_at_shutdown=1
innodb_buffer_pool_dump_now=1
innodb_buffer_pool_load_at_startup=1
innodb_buffer_pool_load_now=1
innodb_buffer_pool_filename=ib_buffer_pool
innodb_max_dirty_pages_pct=90
innodb_lock_wait_timeout=50
symbolic-links=0
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysql]
disable-auto-rehash
default-character-set=utf8
connect-timeout=3
// 创建配置目录
mkdir -p /data/logs/mysql
mkdir -p /data/mysql/var
chown -R mysql:mysql /data/mysql/var
chown -R mysql:mysql /data/logs/mysql
// 重启 mysql
/etc/init.d/mysqld restart
配置 Skywalking Collector 服务
cd /data/packages/
wget http://mirrors.hust.edu.cn/apache/incubator/skywalking/6.0.0-GA/apache-skywalking-apm-incubating-6.0.0-GA.tar.gz
tar zxvf apache-skywalking-apm-incubating-6.0.0-GA.tar.gz
mv apache-skywalking-apm-incubating /opt/skywalking
ll /opt/skywalking
配置 ES 存储监控数据(推荐)
将储存方式由 h2 修改为 elasticsearch:
storage:
# h2:
# driver: org.h2.jdbcx.JdbcDataSource
# url: jdbc:h2:mem:skywalking-oap-db
# user: sa
elasticsearch:
clusterName: elk-cluster
clusterNodes: 192.168.1.102:9200
indexShardsNumber: 2
indexReplicasNumber: 0
# Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.html
bulkActions: 2000 # Execute the bulk every 2000 requests
bulkSize: 20 # flush the bulk every 20mb
flushInterval: 10 # flush the bulk every 10 seconds whatever the number of requests
concurrentRequests: 2 # the number of concurrent requests
其中主要修改 clusterName 和 clusterNodes 和 已启动的 elasticsearch 配置一致。
配置 Mysql 存储监控数据(不推荐)
1、将储存方式由 h2 修改为 mysql:
cd /opt/skywalking
#修改 config/application.yml (# 修改 storage 部分,注释掉 h2,打开 mysql,其他保持不动):core:
default:
restHost: 127.0.0.1
restPort: 12800
restContextPath: /
gRPCHost: 127.0.0.1
gRPCPort: 11800
storage:
# h2:
# driver: ${SW_STORAGE_H2_DRIVER:org.h2.jdbcx.JdbcDataSource}
# url: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db}
# user: ${SW_STORAGE_H2_USER:sa}
.................... 此处省略 N 行..........................................
# 设置 mysql 存储监控数据
mysql: #取消此行注释
# 配置 datasource, 修改 config/datasource-settings.properties 配置如下:jdbcUrl=jdbc:mysql://localhost:3319/swtest
dataSource.user=root
dataSource.password=<your_pass>
dataSource.cachePrepStmts=true
dataSource.prepStmtCacheSize=250
dataSource.prepStmtCacheSqlLimit=2048
dataSource.useServerPrepStmts=true
dataSource.useLocalSessionState=true
dataSource.rewriteBatchedStatements=true
dataSource.cacheResultSetMetadata=true
dataSource.cacheServerConfiguration=true
dataSource.elideSetAutoCommits=true
dataSource.maintainTimeStats=false
2、下载 mysql 驱动包到 oap-libs 目录下
下载地址:http://central.maven.org/maven2/mysql/mysql-connector-java/
cd /opt/skywalking/oap-libs/
wget http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.47/mysql-connector-java-5.1.47.jar
3、进入 mysql 创建 swtest 数据库
[root@skywalking]# mysql -uroot -p<your_pass>
mysql> CREATE DATABASE swtest;
Query OK, 1 row affected (0.00 sec)
启动 collector 服务
# 初始化
cd /opt/skywalking/bin/
./oapServiceInit.sh
#启动 collector 服务
./oapService.sh
配置 Skywalking Web 服务
1、修改配置
cd /opt/skywalking/webapp
# 修改 webapp.yml 文件配置如下:server:
port: 8080
collector:
path: /graphql
ribbon:
ReadTimeout: 10000
# Point to all backend's restHost:restPort, split by ,
listOfServers: 127.0.0.1:12800
security:
user:
# username
admin:
# password
password: <your_pass> #此处修改你的网站管理员密码
2、启动 web 服务
cd /opt/skywalking/bin
./webappService.sh
启动 bin 目录下的 startup.sh 可以将 collector 和 Web 模块一起启动起来。
如果一切顺利,这时候就可以通过 http://192.168.1.100:8080 来查看 SkyWalking UI 了,默认账号 / 密码:admin/admin。
探针配置(agent)
1、被监控端下载 skywalking
wget http://mirrors.hust.edu.cn/apache/incubator/skywalking/6.0.0-GA/apache-skywalking-apm-incubating-6.0.0-GA.tar.gz
tar zxvf apache-skywalking-apm-incubating-6.0.0-GA.tar.gz
mv apache-skywalking-apm-incubating /opt/skywalking
2、探针的配置 修改 agent.config 配置如下:
vim /opt/skywalking/agent/config/agent.config
-------------------------------------------------------------
agent.service_name=Your_ApplicationName #改为你的项目名字
collector.backend_service=192.168.1.100:11800 #collector 的端口服务地址;logging.level=info
3、启动 Agent
-
基于 Tomcat 的服务 (SpringMvc)
在 tomcat 的 bin 目录下的 catalina.sh 中增加如下命令行CATALINA_OPTS="$CATALINA_OPTS -javaagent:/opt/skywalking/agent/skywalking-agent.jar" export CATALINA_OPTS
- 基于 JAR file 的服务 (SpringBoot)
在启动你的应用程序的命令行中添加 -javaagent 参数. 并确保在 -jar 参数之前添加它. 例如:java -javaagent:/opt/skywalking/agent/skywalking-agent.jar -jar yourApp.jar
然后重启服务,就可以看到页面上有数据了;如果发生了其他错误,请查看日志进行详细排查;collector 的日志和 Web 的日志都是在 SkyWalking 根目录的 log 目录之中(会在 collector 启动之后创建);Agent 的目录是在 agent 目录之下。
: