blob: 03f166385af5bc834aed39bf660d0952781c7dcb [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.skywalking.oap.server.core;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;
import lombok.Setter;
import org.apache.skywalking.oap.server.core.config.SearchableTracesTagsWatcher;
import org.apache.skywalking.oap.server.core.source.ScopeDefaultColumn;
import org.apache.skywalking.oap.server.library.module.ModuleConfig;
@Getter
public class CoreModuleConfig extends ModuleConfig {
private String role = "Mixed";
private String namespace;
private String restHost;
private int restPort;
private String restContextPath;
private int restMaxThreads = 200;
private long restIdleTimeOut = 30000;
private int restAcceptQueueSize = 0;
private String gRPCHost;
private int gRPCPort;
private boolean gRPCSslEnabled = false;
private String gRPCSslKeyPath;
private String gRPCSslCertChainPath;
private String gRPCSslTrustedCAPath;
private int maxConcurrentCallsPerConnection;
private int maxMessageSize;
private int topNReportPeriod;
/**
* The period of L1 aggregation flush. Unit is ms.
*/
private long l1FlushPeriod = 500;
/**
* The threshold of session time. Unit is ms. Default value is 70s.
*/
private long storageSessionTimeout = 70_000;
private final List<String> downsampling;
/**
* The period of doing data persistence. Unit is second.
*/
@Setter
private int persistentPeriod = 25;
private boolean enableDataKeeperExecutor = true;
private int dataKeeperExecutePeriod = 5;
/**
* The time to live of all metrics data. Unit is day.
*/
private int metricsDataTTL = 7;
/**
* The time to live of all record data, including tracing. Unit is Day.
*/
private int recordDataTTL = 3;
private int gRPCThreadPoolSize;
/**
* Timeout for cluster internal communication, in seconds.
*/
private int remoteTimeout = 20;
/**
* The size of network address alias.
*/
private long maxSizeOfNetworkAddressAlias = 1_000_000L;
/**
* Following are cache setting for none stream(s)
*/
private long maxSizeOfProfileTask = 10_000L;
/**
* Analyze profile snapshots paging size.
*/
private int maxPageSizeOfQueryProfileSnapshot = 500;
/**
* Analyze profile snapshots max size.
*/
private int maxSizeOfAnalyzeProfileSnapshot = 12000;
/**
* Query the eBPF Profiling data max duration(second) from database.
*/
private int maxDurationOfQueryEBPFProfilingData = 30;
/**
* Thread Count of query the eBPF Profiling data.
*/
private int maxThreadCountOfQueryEBPFProfilingData = Runtime.getRuntime().availableProcessors();
/**
* Extra model column are the column defined by {@link ScopeDefaultColumn.DefinedByField#requireDynamicActive()} ==
* true. These columns of model are not required logically in aggregation or further query, and it will cause more
* load for memory, network of OAP and storage.
*
* But, being activated, user could see the name in the storage entities, which make users easier to use 3rd party
* tool, such as Kibana-&gt;ES, to query the data by themselves.
*/
private boolean activeExtraModelColumns = false;
/**
* The max length of the service name.
*/
private int serviceNameMaxLength = 70;
/**
* The max length of the service instance name.
*/
private int instanceNameMaxLength = 70;
/**
* The max length of the endpoint name.
*
* <p>NOTICE</p>
* In the current practice, we don't recommend the length over 190.
*/
private int endpointNameMaxLength = 150;
/**
* Define the set of span tag keys, which should be searchable through the GraphQL.
*
* @since 8.2.0
*/
@Setter
@Getter
private String searchableTracesTags = DEFAULT_SEARCHABLE_TAG_KEYS;
@Setter
@Getter
private SearchableTracesTagsWatcher searchableTracesTagsWatcher;
/**
* Define the set of logs tag keys, which should be searchable through the GraphQL.
*
* @since 8.4.0
*/
@Setter
@Getter
private String searchableLogsTags = "";
/**
* Define the set of Alarm tag keys, which should be searchable through the GraphQL.
*
* @since 8.6.0
*/
@Setter
@Getter
private String searchableAlarmTags = "";
/**
* The max size of tags keys for autocomplete select.
*
* @since 9.1.0
*/
@Setter
@Getter
private int autocompleteTagKeysQueryMaxSize = 100;
/**
* The max size of tags values for autocomplete select.
*
* @since 9.1.0
*/
@Setter
@Getter
private int autocompleteTagValuesQueryMaxSize = 100;
/**
* The number of threads used to prepare metrics data to the storage.
*
* @since 8.7.0
*/
@Setter
@Getter
private int prepareThreads = 2;
@Getter
@Setter
private boolean enableEndpointNameGroupingByOpenapi = true;
/**
* The maximum size in bytes allowed for request headers.
* Use -1 to disable it.
*/
private int httpMaxRequestHeaderSize = 8192;
/**
* The period of HTTP URI pattern recognition. Unit is second.
* @since 9.5.0
*/
private int syncPeriodHttpUriRecognitionPattern = 10;
/**
* The training period of HTTP URI pattern recognition. Unit is second.
* @since 9.5.0
*/
private int trainingPeriodHttpUriRecognitionPattern = 60;
/**
* The max number of HTTP URIs per service for further URI pattern recognition.
* @since 9.5.0
*/
private int maxHttpUrisNumberPerService = 3000;
/**
* The UI menu should activate fetch interval, default 20s
*/
private int uiMenuRefreshInterval = 20;
/**
* The service cache refresh interval, default 10s
*/
@Setter
@Getter
private int serviceCacheRefreshInterval = 10;
/**
* If disable the hierarchy, the service and instance hierarchy relation will not be built.
* And the query of hierarchy will return empty result.
*/
@Setter
@Getter
private boolean enableHierarchy = true;
public CoreModuleConfig() {
this.downsampling = new ArrayList<>();
}
/**
* OAP server could work in different roles.
*/
public enum Role {
/**
* Default role. OAP works as the {@link #Receiver} and {@link #Aggregator}
*/
Mixed,
/**
* Receiver mode OAP open the service to the agents, analysis and aggregate the results and forward the results
* to {@link #Mixed} and {@link #Aggregator} roles OAP. The only exception is for {@link
* org.apache.skywalking.oap.server.core.analysis.record.Record}, they don't require 2nd round distributed
* aggregation, is being pushed into the storage from the receiver OAP directly.
*/
Receiver,
/**
* Aggregator mode OAP receives data from {@link #Mixed} and {@link #Aggregator} OAP nodes, and do 2nd round
* aggregation. Then save the final result to the storage.
*/
Aggregator;
public static Role fromName(String name) {
for (Role role : Role.values()) {
if (role.name().equalsIgnoreCase(name)) {
return role;
}
}
return Mixed;
}
}
/**
* SkyWalking Java Agent provides the recommended tag keys for other language agents or SDKs. This field declare the
* recommended keys should be searchable.
*/
private static final String DEFAULT_SEARCHABLE_TAG_KEYS = String.join(
Const.COMMA,
"http.method",
"status_code",
"db.type",
"db.instance",
"mq.queue",
"mq.topic",
"mq.broker"
);
}