NOM 代理作为容器内进程

NOM 代理可以在 pod 中运行的 Neo4j 容器中作为一个附加进程运行。此模式不是一个好习惯,因为容器的设计是单一职责。但是,如果可以在 Kubernetes 集群中通过以下脚本快速设置监控 Neo4j 实例:

inject_agent.sh
#!/bin/bash -eu

function inject_agent() {
 instanceName=$1

 agent_env=$(cat $2)

 script="cat <<EOF > install_agent.sh
#!/bin/bash -eu
tar -xzf products/neo4j-ops-manager-agent-*-linux-amd64.tar.gz --strip-components 1 \
&& mv bin/agent /bin/agent

cat <<EOT >> ~/.profile
$agent_env
EOT

. ~/.profile

exec agent console -s
EOF"

 kubectl exec $instanceName -- sh -c "$script"

 kubectl exec $instanceName -- sh -c "chmod +x /tmp/install_agent.sh && /tmp/install_agent.sh"
}

inject_agent $1 $2

上述脚本需要 pod 中运行的 Neo4j 容器的名称,以及一个包含所有代理配置的 .env 样式文件,如下所示:

agent.env
export CONFIG_AGENT_NAME="test_local"
export CONFIG_AGENT_DESCRIPTION="local self-registered agent"
export CONFIG_SERVER_GRPC_ADDRESS="server:9090"
export CONFIG_SERVER_HTTP_ADDRESS="https://server:8080"
export CONFIG_LOG_LEVEL="debug"
export CONFIG_INSTANCE_1_NAME="test_local"
export CONFIG_INSTANCE_1_BOLT_URI="bolt://localhost:7687"
export CONFIG_INSTANCE_1_BOLT_USERNAME="neo4j"
export CONFIG_INSTANCE_1_BOLT_PASSWORD="passw0rd"
export CONFIG_INSTANCE_1_QUERY_LOG_PORT="9500"
export CONFIG_INSTANCE_1_LOG_CONFIG_PATH="/var/lib/neo4j/conf/server-logs.xml"
export CONFIG_INSTANCE_1_QUERY_LOG_MIN_DURATION="100"
export NEO4J_ACCEPT_LICENSE_AGREEMENT="yes"
export NEO4J_AUTH=neo4j/passw0rd
export NEO4J_EDITION="enterprise"
export NEO4J_metrics_prometheus_enabled="true"
export NEO4J_metrics_prometheus_endpoint="localhost:2004"
export NEO4J_metrics_filter="*"
由于代理配置已添加到 shell .profile 中,因此容器上的任何 shell 执行代理都应看到为代理设置的值。