HDDS-919. Enable prometheus endpoints for Ozone datanodes (#502)
Pull request from Elek, Márton. (#502)
This commit is contained in:
parent
313e8b9f13
commit
7f636b47b5
|
@ -227,4 +227,24 @@ public final class HddsConfigKeys {
|
||||||
public static final String HDDS_SECURITY_CLIENT_SCM_CERTIFICATE_PROTOCOL_ACL =
|
public static final String HDDS_SECURITY_CLIENT_SCM_CERTIFICATE_PROTOCOL_ACL =
|
||||||
"hdds.security.client.scm.certificate.protocol.acl";
|
"hdds.security.client.scm.certificate.protocol.acl";
|
||||||
|
|
||||||
|
public static final String HDDS_DATANODE_HTTP_ENABLED_KEY =
|
||||||
|
"hdds.datanode.http.enabled";
|
||||||
|
public static final String HDDS_DATANODE_HTTP_BIND_HOST_KEY =
|
||||||
|
"hdds.datanode.http-bind-host";
|
||||||
|
public static final String HDDS_DATANODE_HTTPS_BIND_HOST_KEY =
|
||||||
|
"hdds.datanode.https-bind-host";
|
||||||
|
public static final String HDDS_DATANODE_HTTP_ADDRESS_KEY =
|
||||||
|
"hdds.datanode.http-address";
|
||||||
|
public static final String HDDS_DATANODE_HTTPS_ADDRESS_KEY =
|
||||||
|
"hdds.datanode.https-address";
|
||||||
|
|
||||||
|
public static final String HDDS_DATANODE_HTTP_BIND_HOST_DEFAULT = "0.0.0.0";
|
||||||
|
public static final int HDDS_DATANODE_HTTP_BIND_PORT_DEFAULT = 9882;
|
||||||
|
public static final int HDDS_DATANODE_HTTPS_BIND_PORT_DEFAULT = 9883;
|
||||||
|
public static final String
|
||||||
|
HDDS_DATANODE_HTTP_KERBEROS_PRINCIPAL_KEY =
|
||||||
|
"hdds.datanode.http.kerberos.principal";
|
||||||
|
public static final String
|
||||||
|
HDDS_DATANODE_HTTP_KERBEROS_KEYTAB_FILE_KEY =
|
||||||
|
"hdds.datanode.http.kerberos.keytab";
|
||||||
}
|
}
|
|
@ -2029,6 +2029,70 @@
|
||||||
</description>
|
</description>
|
||||||
</property>
|
</property>
|
||||||
|
|
||||||
|
<property>
|
||||||
|
<name>hdds.datanode.http.kerberos.principal</name>
|
||||||
|
<value>HTTP/_HOST@EXAMPLE.COM</value>
|
||||||
|
<tag>HDDS, SECURITY, MANAGEMENT</tag>
|
||||||
|
<description>
|
||||||
|
The kerberos principal for the datanode http server.
|
||||||
|
</description>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>hdds.datanode.http.kerberos.keytab</name>
|
||||||
|
<value>/etc/security/keytabs/HTTP.keytab</value>
|
||||||
|
<tag>HDDS, SECURITY, MANAGEMENT</tag>
|
||||||
|
<description>
|
||||||
|
The kerberos keytab file for datanode http server
|
||||||
|
</description>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>hdds.datanode.http-address</name>
|
||||||
|
<value>0.0.0.0:9882</value>
|
||||||
|
<tag>HDDS, MANAGEMENT</tag>
|
||||||
|
<description>
|
||||||
|
The address and the base port where the Datanode web ui will listen on.
|
||||||
|
If the port is 0 then the server will start on a free port.
|
||||||
|
</description>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>hdds.datanode.http-bind-host</name>
|
||||||
|
<value>0.0.0.0</value>
|
||||||
|
<tag>HDDS, MANAGEMENT</tag>
|
||||||
|
<description>
|
||||||
|
The actual address the Datanode web server will bind to. If this
|
||||||
|
optional address is set, it overrides only the hostname portion of
|
||||||
|
hdds.datanode.http-address.
|
||||||
|
</description>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>hdds.datanode.http.enabled</name>
|
||||||
|
<value>true</value>
|
||||||
|
<tag>HDDS, MANAGEMENT</tag>
|
||||||
|
<description>
|
||||||
|
Property to enable or disable Datanode web ui.
|
||||||
|
</description>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>hdds.datanode.https-address</name>
|
||||||
|
<value>0.0.0.0:9883</value>
|
||||||
|
<tag>HDDS, MANAGEMENT, SECURITY</tag>
|
||||||
|
<description>
|
||||||
|
The address and the base port where the Datanode web UI will listen
|
||||||
|
on using HTTPS.
|
||||||
|
|
||||||
|
If the port is 0 then the server will start on a free port.
|
||||||
|
</description>
|
||||||
|
</property>
|
||||||
|
<property>
|
||||||
|
<name>hdds.datanode.https-bind-host</name>
|
||||||
|
<value>0.0.0.0</value>
|
||||||
|
<tag>HDDS, MANAGEMENT, SECURITY</tag>
|
||||||
|
<description>
|
||||||
|
The actual address the Datanode web server will bind to using HTTPS.
|
||||||
|
If this optional address is set, it overrides only the hostname portion of
|
||||||
|
hdds.datanode.http-address.
|
||||||
|
</description>
|
||||||
|
</property>
|
||||||
<property>
|
<property>
|
||||||
<name>ozone.client.retry.max.attempts</name>
|
<name>ozone.client.retry.max.attempts</name>
|
||||||
<value>10</value>
|
<value>10</value>
|
||||||
|
|
|
@ -0,0 +1,86 @@
|
||||||
|
/**
|
||||||
|
* 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
|
||||||
|
* <p>
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* <p>
|
||||||
|
* 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.hadoop.ozone;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.apache.hadoop.conf.Configuration;
|
||||||
|
import org.apache.hadoop.hdds.HddsConfigKeys;
|
||||||
|
import org.apache.hadoop.hdds.server.BaseHttpServer;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Simple http server to provide basic monitoring for hdds datanode.
|
||||||
|
* <p>
|
||||||
|
* This server is used to access default /conf /prom /prof endpoints.
|
||||||
|
*/
|
||||||
|
public class HddsDatanodeHttpServer extends BaseHttpServer {
|
||||||
|
|
||||||
|
public HddsDatanodeHttpServer(Configuration conf) throws IOException {
|
||||||
|
super(conf, "hddsDatanode");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getHttpAddressKey() {
|
||||||
|
return HddsConfigKeys.HDDS_DATANODE_HTTP_ADDRESS_KEY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getHttpBindHostKey() {
|
||||||
|
return HddsConfigKeys.HDDS_DATANODE_HTTP_BIND_HOST_KEY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getHttpsAddressKey() {
|
||||||
|
return HddsConfigKeys.HDDS_DATANODE_HTTPS_ADDRESS_KEY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getHttpsBindHostKey() {
|
||||||
|
return HddsConfigKeys.HDDS_DATANODE_HTTPS_BIND_HOST_KEY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getBindHostDefault() {
|
||||||
|
return HddsConfigKeys.HDDS_DATANODE_HTTP_BIND_HOST_DEFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getHttpBindPortDefault() {
|
||||||
|
return HddsConfigKeys.HDDS_DATANODE_HTTP_BIND_PORT_DEFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getHttpsBindPortDefault() {
|
||||||
|
return HddsConfigKeys.HDDS_DATANODE_HTTPS_BIND_PORT_DEFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getKeytabFile() {
|
||||||
|
return HddsConfigKeys.HDDS_DATANODE_HTTP_KERBEROS_KEYTAB_FILE_KEY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getSpnegoPrincipal() {
|
||||||
|
return HddsConfigKeys.HDDS_DATANODE_HTTP_KERBEROS_PRINCIPAL_KEY;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected String getEnabledKey() {
|
||||||
|
return HddsConfigKeys.HDDS_DATANODE_HTTP_ENABLED_KEY;
|
||||||
|
}
|
||||||
|
}
|
|
@ -19,6 +19,7 @@ package org.apache.hadoop.ozone;
|
||||||
|
|
||||||
import com.google.common.annotations.VisibleForTesting;
|
import com.google.common.annotations.VisibleForTesting;
|
||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
|
|
||||||
import org.apache.hadoop.conf.Configurable;
|
import org.apache.hadoop.conf.Configurable;
|
||||||
import org.apache.hadoop.conf.Configuration;
|
import org.apache.hadoop.conf.Configuration;
|
||||||
import org.apache.hadoop.hdds.HddsUtils;
|
import org.apache.hadoop.hdds.HddsUtils;
|
||||||
|
@ -67,6 +68,7 @@ public class HddsDatanodeService extends GenericCli implements ServicePlugin {
|
||||||
private DatanodeDetails datanodeDetails;
|
private DatanodeDetails datanodeDetails;
|
||||||
private DatanodeStateMachine datanodeStateMachine;
|
private DatanodeStateMachine datanodeStateMachine;
|
||||||
private List<ServicePlugin> plugins;
|
private List<ServicePlugin> plugins;
|
||||||
|
private HddsDatanodeHttpServer httpServer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default constructor.
|
* Default constructor.
|
||||||
|
@ -180,6 +182,12 @@ public class HddsDatanodeService extends GenericCli implements ServicePlugin {
|
||||||
LOG.info("Hdds Datanode login successful.");
|
LOG.info("Hdds Datanode login successful.");
|
||||||
}
|
}
|
||||||
datanodeStateMachine = new DatanodeStateMachine(datanodeDetails, conf);
|
datanodeStateMachine = new DatanodeStateMachine(datanodeDetails, conf);
|
||||||
|
try {
|
||||||
|
httpServer = new HddsDatanodeHttpServer(conf);
|
||||||
|
httpServer.start();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
LOG.error("HttpServer failed to start.", ex);
|
||||||
|
}
|
||||||
startPlugins();
|
startPlugins();
|
||||||
// Starting HDDS Daemons
|
// Starting HDDS Daemons
|
||||||
datanodeStateMachine.startDaemon();
|
datanodeStateMachine.startDaemon();
|
||||||
|
@ -294,6 +302,14 @@ public class HddsDatanodeService extends GenericCli implements ServicePlugin {
|
||||||
if (datanodeStateMachine != null) {
|
if (datanodeStateMachine != null) {
|
||||||
datanodeStateMachine.stopDaemon();
|
datanodeStateMachine.stopDaemon();
|
||||||
}
|
}
|
||||||
|
if (httpServer != null) {
|
||||||
|
try {
|
||||||
|
httpServer.stop();
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.error("Stopping HttpServer is failed.", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
/**
|
||||||
|
* 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
|
||||||
|
* <p>
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* <p>
|
||||||
|
* 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.
|
||||||
|
*/
|
|
@ -23,6 +23,7 @@ services:
|
||||||
- ../..:/opt/hadoop
|
- ../..:/opt/hadoop
|
||||||
ports:
|
ports:
|
||||||
- 9864
|
- 9864
|
||||||
|
- 9882
|
||||||
command: ["/opt/hadoop/bin/ozone","datanode"]
|
command: ["/opt/hadoop/bin/ozone","datanode"]
|
||||||
env_file:
|
env_file:
|
||||||
- ./docker-config
|
- ./docker-config
|
||||||
|
|
|
@ -577,6 +577,7 @@ public class MiniOzoneClusterImpl implements MiniOzoneCluster {
|
||||||
|
|
||||||
private void configureHddsDatanodes() {
|
private void configureHddsDatanodes() {
|
||||||
conf.set(ScmConfigKeys.HDDS_REST_HTTP_ADDRESS_KEY, "0.0.0.0:0");
|
conf.set(ScmConfigKeys.HDDS_REST_HTTP_ADDRESS_KEY, "0.0.0.0:0");
|
||||||
|
conf.set(HddsConfigKeys.HDDS_DATANODE_HTTP_ADDRESS_KEY, "0.0.0.0:0");
|
||||||
conf.set(HDDS_DATANODE_PLUGINS_KEY,
|
conf.set(HDDS_DATANODE_PLUGINS_KEY,
|
||||||
"org.apache.hadoop.ozone.web.OzoneHddsDatanodeService");
|
"org.apache.hadoop.ozone.web.OzoneHddsDatanodeService");
|
||||||
conf.setBoolean(OzoneConfigKeys.DFS_CONTAINER_IPC_RANDOM_PORT,
|
conf.setBoolean(OzoneConfigKeys.DFS_CONTAINER_IPC_RANDOM_PORT,
|
||||||
|
|
Loading…
Reference in New Issue