一 整體架構
整個架構,分成上、下、左、右四部分:
- 上部分 Agent :負責從應用中,收集鏈路信息,發送給 SkyWalking OAP 服務器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 數據信息。而我們目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 數據,傳遞給服務器。
- 下部分 SkyWalking OAP :負責接收 Agent 發送的 Tracing 數據信息,然后進行分析(Analysis Core) ,存儲到外部存儲器( Storage ),最終提供查詢( Query )功能。
- 右部分 Storage :Tracing 數據存儲。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多種存儲器。而我們目前采用的是 ES ,主要考慮是 SkyWalking 開發團隊自己的生產環境采用 ES 為主。
- 左部分 SkyWalking UI :負責提供控臺,查看鏈路等等。
二 安裝
已驗證skywalking9.6.0,centos7.0, MySQL8.0.26
2.1 jdk安裝
-
Skywalking9.6.0需要jdk9+及以上
- 下載解壓到/usr/local/java/jdk11
- 配置環境變量
# 打開文件
vim /etc/profile
# 在文件最后加上
JAVA_HOME=/usr/local/java/jdk11
PATH=$PATH:$JAVA_HOME/bin
# 保存退出
# 應用修改
source /etc/profile
# 驗證:
java -version
2.2 安裝skywalking
- 下載安裝包官網(慢),推薦清華源
- 解壓放置路徑/usr/local/skywalking
2.2.1 運行
-
進入/usr/local/skywalking/bin目錄
運行oapService
./oapService.sh &
運行ui webappService,默認端口8080
./webappService.sh &
-
驗證運行結果
[root@localhost bin]# jps 6099 Jps 18824 OAPServerStartUp 9817 ApplicationStartUp # 查看訪問 [root@localhost bin]# curl localhost:8080
瀏覽器訪問IP:8080(防火墻開啟端口)
2.2.2 結果
三 配置
3.1 數據庫
-
skywalking 默認使用h2數據庫,基于內容的數據庫,重啟服務后數據重置,修改存儲,支持數據持久化
-
修改/usr/local/skywalking/config/application.yaml
# line 159 storage:selector: ${SW_STORAGE:h2}
?
-
修改為mysql ,我這里用的MySQL8.0.26
# line 159 storage:selector: ${SW_STORAGE:mysql}# line 191 變更自己的庫名,添加驅動包名mysql:properties:jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://yourIP:3306/swtest?rewriteBatchedStatements=true&allowMultiQueries=true"}dataSource.user: ${SW_DATA_SOURCE_USER:root}dataSource.password: ${SW_DATA_SOURCE_PASSWORD:your password}dataSource.cachePrepStmts: ${SW_DATA_SOURCE_CACHE_PREP_STMTS:true}dataSource.prepStmtCacheSize: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_SIZE:250}dataSource.prepStmtCacheSqlLimit: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_LIMIT:2048}dataSource.useServerPrepStmts: ${SW_DATA_SOURCE_USE_SERVER_PREP_STMTS:true}metadataQueryMaxSize: ${SW_STORAGE_MYSQL_QUERY_MAX_SIZE:5000}maxSizeOfBatchSql: ${SW_STORAGE_MAX_SIZE_OF_BATCH_SQL:2000}asyncBatchPersistentPoolSize: ${SW_STORAGE_ASYNC_BATCH_PERSISTENT_POOL_SIZE:4}driver: com.mysql.cj.jdbc.Driver# 保存退出,配置修改完成
?
-
添加MySQL8驅動包到路徑/usr/local/skywalking/oap-libs/下
-
重啟oapService服務驗證,是否正常運行
- jps
- kill -9 pid (oapService的)
- 重啟oapService
3.2 訪問端口修改
- 修改文件/usr/local/skywalking/webapp/application
- 重啟webappService服務
- jps
- kill -9 pid(webappService的)
- 重啟webappService
四 監控
- Prometheus 節點導出器從虛擬機收集指標數據。
- OpenTelemetry Collector 通過 Prometheus Receiver 從 node-exporter 獲取指標,并通過 OpenTelemetry gRPC 導出器將指標推送到 SkyWalking OAP Server。
- SkyWalking OAP Server 使用 MAL 解析表達式,以過濾/計算/聚合和存儲結果。
4.1 self-observability自監控
4.1.1 節點導出器
-
修改配置文件/usr/local/skywalking/config/application.yaml
# line 452 telemetry:selector: ${SW_TELEMETRY: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:""}
?
-
重啟oapService服務。
4.1.2 節點收集器
-
安裝OpenTelemetry Collector
# RPM Installation sudo yum update sudo yum -y install wget systemctl wget https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v0.89.0/otelcol_0.89.0_linux_amd64.rpm sudo rpm -ivh otelcol_0.89.0_linux_amd64.rpm
?
-
修改OpenTelemetry Collector配置文件
-
創建自己的配置文件otel-collection-config.yaml (/etc/otelcol/)
receivers:prometheus:config:scrape_configs:- job_name: "skywalking-so11y" scrape_interval: 10sstatic_configs:- targets: ["0.0.0.0:1234"]labels:host_name: vmlinuxservice: self-observability processors:batch:exporters:otlp:endpoint: "your IP:11800" # The OAP Server addresstls:insecure: truelogging:loglevel: debug service:pipelines:metrics:receivers: [prometheus]processors: [batch]exporters: [otlp, logging]
?
-
修改OpenTelemetry Collector啟動記載配置文件/etc/otelcol/otelcol.conf指向新建的otel-collection-config.yaml
# Systemd environment file for the otelcol service # Command-line options for the otelcol service. # Run `/usr/bin/otelcol --help` to see all available options. # OTELCOL_OPTIONS="--config=/etc/otelcol/config.yaml" OTELCOL_OPTIONS="--config=/etc/otelcol/otel-collector-config.yaml"
?
-
重啟OpenTelemetry Collector
systemctl restart otelcol
-
4.1.3 訪問查看
4.2 基礎設施監控-Linux
4.2.1 節點導出器
- 安裝并運行節點導出器
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xvfz node_exporter-1.7.0.linux-amd64.tar.gz
mkdir /usr/local/skywalking/exporter
mv node_exporter-1.7.0.linux-amd6 /usr/local/skywalking/exporter/node_exporter
cd node_exporter
nohup ./node_exporter > /usr/local/skywalking/exporter/node_exporter/node_exporter.log 2>&1 &
# 驗證
curl 127.0.0.1:9100
4.2.2 節點收集器
- 修改OpenTelemetry Collector配置文件otel-collection-config.yaml
receivers:prometheus:config:scrape_configs:- job_name: "vm-monitoring"scrape_interval: 10sstatic_configs:- targets: ["0.0.0.0:9100"]labels:node_identifier_host_name: vm-machine- job_name: "skywalking-so11y"scrape_interval: 10sstatic_configs:- targets: ["0.0.0.0:1234"]labels:host_name: vmlinuxservice: self-observability
processors:batch:exporters:otlp:endpoint: "you IP:11800" # The OAP Server addresstls:insecure: truelogging:loglevel: debug
service:pipelines:metrics:receivers: [prometheus]processors: [batch]exporters: [otlp, logging]
- 重啟OpenTelemetry Collector
systemctl restart otelcol
4.2.3 查看訪問
4.3 數據庫-Redis
4.3.1 節點導出器
wget https://github.com/oliver006/redis_exporter/releases/download/v1.55.0/redis_exporter-v1.55.0.linux-amd64.tar.gz
tar xvfz redis_exporter-v1.55.0.linux-amd64.tar.gz
mv node_exporter-1.7.0.linux-amd6 /usr/local/skywalking/exporter/redis_exporter
cd redis_exporter
nohup ./redis_exporter -redis.password="your password" > /usr/local/skywalking/exporter/redis_exporter/redis_exporter.log 2>&1 &
# 驗證
curl 127.0.0.1:9100
4.3.2 節點導入器
-
修改OpenTelemetry Collector配置文件otel-collection-config.yaml
receivers:prometheus:config:scrape_configs:- job_name: "vm-monitoring"scrape_interval: 10sstatic_configs:- targets: ["0.0.0.0:9100"]labels:node_identifier_host_name: vm-machine- job_name: "skywalking-so11y"scrape_interval: 10sstatic_configs:- targets: ["0.0.0.0:1234"]labels:host_name: vmlinuxservice: self-observability- job_name: "redis-monitoring"scrape_interval: 10sstatic_configs:- targets: ["0.0.0.0:9121"]labels:host_name: redis processors:batch:exporters:otlp:endpoint: "your IP:11800" # The OAP Server addresstls:insecure: truelogging:loglevel: debug service:pipelines:metrics:receivers: [prometheus]processors: [batch]exporters: [otlp, logging]
?
-
重啟OpenTelemetry Collector
systemctl restart otelcol
?
4.3.3 訪問查看
4.4 數據庫-MySQL
4.4.1 節點導出器
- 創建MySQL監控賬號并授權
CREATE USER 'mysql_exporter'@'%' IDENTIFIED BY 'your password' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysql_exporter'@'%';
FLUSH PRIVILEGES;
- mysqld_exporter.conf
[client]
user=mysql_exporter
password=your password
- 啟動mysql_exporter
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.0/mysqld_exporter-0.15.0.linux-amd64.tar.gz
tar xvfz mysqld_exporter-0.15.0.linux-amd64.tar.gz
mv mysqld_exporter-0.15.0.linux-amd64 /usr/local/skywalking/exporter/mysqld_exporter
cd mysqld_exporter
# 創建配置MySQL監控賬號的文件/usr/local/skywalking/exporter/mysqld_exporter/mysqld_exporter.conf
nohup ./mysqld_exporter --config.my-cnf="mysqld_exporter.conf" > /usr/local/skywalking/exporter/mysql_exporter/mysql_exporter.log 2>&1 &
# 驗證
curl 127.0.0.1:9104
4.4.2 節點接收器
-
修改OpenTelemetry Collector配置文件otel-collection-config.yaml
receivers:prometheus:config:scrape_configs:- job_name: "vm-monitoring"scrape_interval: 10sstatic_configs:- targets: ["0.0.0.0:9100"]labels:node_identifier_host_name: vm-machine- job_name: "skywalking-so11y"scrape_interval: 10sstatic_configs:- targets: ["0.0.0.0:1234"]labels:host_name: vmlinuxservice: self-observability- job_name: "mysql-monitoring"scrape_interval: 10sstatic_configs:- targets: ["0.0.0.0:9104"]labels:host_name: mysql8- job_name: "redis-monitoring"scrape_interval: 10sstatic_configs:- targets: ["0.0.0.0:9121"]labels:host_name: redisprocessors:batch:exporters:otlp:endpoint: "your IP:11800" # The OAP Server addresstls:insecure: truelogging:loglevel: debug service:pipelines:metrics:receivers: [prometheus]processors: [batch]exporters: [otlp, logging]
-
重啟OpenTelemetry Collector
systemctl restart otelcol
?
-