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就报错,后来找了很多博客,才发现是版本不一致造成的,真的就很气人。记录下来,希望大家引以为戒!!!!