skywalking是一個分布式鍊路追蹤系統,上一篇文章對比了一下skywalking與zipkin,并對skywalking做了一個簡單的使用。
skywalking預設是基于H2資料庫的,H2資料庫是一個純java實作的關系型資料庫,它是一個開源的嵌入式資料庫引擎。可以和應用程式打包一起釋出,很友善。
在skywalking中h2資料庫是基于記憶體的,是以一旦skywalking重新開機,那麼之前儲存的資料就全都沒有了。而且如果資料過多的話,用預設的H2資料庫性能也不是很好。skywalking可以支援mysql、es等,這篇文章,主要是記錄一下skywalking與elasticsearch的整合與使用。
本次是針對windows下的使用
一 elasticsearch的下載下傳與配置
1.1 下載下傳elasticsearch
elasticsearch官網下載下傳的話,會比較慢,我是在一個部落客那看到一個國内鏡像位址,下載下傳會快很多。
位址:https://mirrors.huaweicloud.com/elasticsearch/7.0.0
我下載下傳的是es7這個版本,因為後面要和skywalking的版本對應上。
1.2 es的配置
(1)解壓es後,打開config下面的elasticsearch.yml,在配置檔案下面添加如下配置:
cluster.name: skywalkinges # 這個名字随便取,但是後面要和skywalking中的名字一緻
node.name: node-1 # 節點名稱也可以随便取
network.host: 0.0.0.0
discovery.seed_hosts: ["127.0.0.1"] # 一定要配置,不然找不到主節點
cluster.initial_master_nodes: ["node-1"] # 一定要配置,不然找不到主節點,這個名字與上面的node.name一緻
(2)至此,es的配置已經完成,現在啟動它就可以了。
在/bin下面找到elasticsearch.bat。輕按兩下就可以啟動了
(3)浏覽器上輸入 http://localhost:9200看看是否啟動成功
二 skywalking的下載下傳與配置
2.1 下載下傳
下載下傳skywalking最重要的就是要和es的版本對應上,我因為這個問題,處理了很久,最後換了版本就解決了。
(1)打開skywalking官網
下載下傳skywalking時,不是版本越新越好,進入它的以前的版本,下載下傳與es7對應的skywalking版本。也可以直接使用 https://archive.apache.org/dist/skywalking/ 位址進入下載下傳頁面
版本一定要對應!!!
(2)解壓下載下傳下來的skywalking,打開config下面的application.yml檔案
将預設的H2資料源注釋掉,将elasticsearch7配置放開,配置如下
storage:
# elasticsearch:
# nameSpace: ${SW_NAMESPACE:""}
# clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
# protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
# trustStorePath: ${SW_SW_STORAGE_ES_SSL_JKS_PATH:"../es_keystore.jks"}
# trustStorePass: ${SW_SW_STORAGE_ES_SSL_JKS_PASS:""}
# user: ${SW_ES_USER:""}
# password: ${SW_ES_PASSWORD:""}
# indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}
# indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}
# # Those data TTL settings will override the same settings in core module.
# recordDataTTL: ${SW_STORAGE_ES_RECORD_DATA_TTL:7} # Unit is day
# otherMetricsDataTTL: ${SW_STORAGE_ES_OTHER_METRIC_DATA_TTL:45} # Unit is day
# monthMetricsDataTTL: ${SW_STORAGE_ES_MONTH_METRIC_DATA_TTL:18} # Unit is month
# # Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.html
# bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:1000} # Execute the bulk every 1000 requests
# flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} # flush the bulk every 10 seconds whatever the number of requests
# concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requests
# resultWindowMaxSize: ${SW_STORAGE_ES_QUERY_MAX_WINDOW_SIZE:10000}
# metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}
# segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}
elasticsearch7:
nameSpace: ${SW_NAMESPACE:"skywalkinges"} # 這個名字與剛剛elasticsearch中配置的cluster.name一緻
clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}
protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
trustStorePath: ${SW_SW_STORAGE_ES_SSL_JKS_PATH:"../es_keystore.jks"}
trustStorePass: ${SW_SW_STORAGE_ES_SSL_JKS_PASS:""}
user: ${SW_ES_USER:""}
password: ${SW_ES_PASSWORD:""}
indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}
indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}
# Those data TTL settings will override the same settings in core module.
recordDataTTL: ${SW_STORAGE_ES_RECORD_DATA_TTL:7} # Unit is day
otherMetricsDataTTL: ${SW_STORAGE_ES_OTHER_METRIC_DATA_TTL:45} # Unit is day
monthMetricsDataTTL: ${SW_STORAGE_ES_MONTH_METRIC_DATA_TTL:18} # Unit is month
# Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.html
bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:1000} # Execute the bulk every 1000 requests
flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} # flush the bulk every 10 seconds whatever the number of requests
concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requests
resultWindowMaxSize: ${SW_STORAGE_ES_QUERY_MAX_WINDOW_SIZE:10000}
metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}
segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}
# 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}
# metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
# mysql:
# properties:
# jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://localhost:3306/swtest"}
# dataSource.user: ${SW_DATA_SOURCE_USER:root}
# dataSource.password: ${SW_DATA_SOURCE_PASSWORD:[email protected]}
# 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}
(3)啟動skywalking服務端
打開/bin檔案夾,輕按兩下oapService.bat,啟動服務端
(4)啟動skywalking ui
打開/bin檔案夾,輕按兩下webappService.bat,啟動skywalking的ui頁面
(5)浏覽器輸入localhost:8080 出現如下頁面即啟動成功
注意:8080這個端口号是可以修改的,位址:/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
三 配置idea
(1)點選idea視窗 run -> edit configuration,打開配置頁面,在VM options中進行配置
- -javaagent 是要指向skywalking下的agent絕對路徑,
- -Dskywalking.agent.service_name 這個名字可以随便取,他就是你最後顯示在skywalking中的服務名字
-
-Dskywalking.collector.backend_service 這個是skywalking服務位址
(2) 配置好後,點選apply 然後運作該服務,服務啟動完畢,調用服務中的接口,最後在skywalking ui中可以看到效果
- 如果沒有效果,可以點選右上角的重新整理
- 如果是一個調用鍊的話,那麼這條調用鍊上面的服務,都需要配置skywalking的agent。
至此,skywalking與elasticsearch的整合就完畢了,這個過程中,我一開始嘗試了很久,但是一啟動skywalking,elasticsearch就報錯,後來找了很多部落格,才發現是版本不一緻造成的,真的就很氣人。記錄下來,希望大家引以為戒!!!!