Extend storage

SkyWalking has already provided several storage solutions. In this document, you could learn how to implement a new storage easily.

Define your storage provider

  1. Define a class extends org.apache.skywalking.oap.server.library.module.ModuleProvider.
  2. Set this provider targeting to Storage module.
@Override 
public Class<? extends ModuleDefine> module() {
    return StorageModule.class;
}

Implement all DAOs

Here is the list of all DAO interfaces in storage

  1. IServiceInventoryCacheDAO
  2. IServiceInstanceInventoryCacheDAO
  3. IEndpointInventoryCacheDAO
  4. INetworkAddressInventoryCacheDAO
  5. IBatchDAO
  6. StorageDAO
  7. IRegisterLockDAO
  8. ITopologyQueryDAO
  9. IMetricsQueryDAO
  10. ITraceQueryDAO
  11. IMetadataQueryDAO
  12. IAggregationQueryDAO
  13. IAlarmQueryDAO
  14. IHistoryDeleteDAO
  15. IMetricsDAO
  16. IRecordDAO
  17. IRegisterDAO
  18. ILogQueryDAO
  19. ITopNRecordsQueryDAO
  20. IBrowserLogQueryDAO

Register all service implementations

In public void prepare(), use this#registerServiceImplementation method to do register binding your implementation with the above interfaces.

Example

Take org.apache.skywalking.oap.server.storage.plugin.elasticsearch.StorageModuleElasticsearchProvider or org.apache.skywalking.oap.server.storage.plugin.jdbc.mysql.MySQLStorageProvider as a good example.

Redistribution with new storage implementation.

You don’t have to clone the main repo just for implementing the storage. You could just easy depend our Apache releases. Take a look at SkyAPM/SkyWalking-With-Es5x-Storage repo, SkyWalking v6 redistribution with ElasticSearch 5 TCP connection storage implementation.