Nomad クライアント メトリクスを設定する
CircleCI Server version 2.x は、リリースのサポートが終了しています。 リリースがサポートされているバージョンへのアップグレードについては、お客様のアカウントチームにご相談ください。 |
Nomad Metrics is a helper service used to collect metrics data from the Nomad server and clients running on the Services and Nomad instances respectively. メトリクスは DogStatsD プロトコルを使用して収集され、サービスマシンに送信されます。
Nomad メトリクスサーバー
Nomad メトリクスコンテナは、CircleCI Server のインストールプロセスの一部としてサーバーフラグを使用してサービスホストで実行され、追加設定は必要ありません。
Nomad メトリクスクライアント
Nomad メトリクスクライアントは、すべての Nomad クライアントインスタンスにインストールされ、実行されます。 Nomad メトリクスクライアントをインストールおよび設定するには、AWS の起動設定を更新する必要があります。 また、AWS セキュリティグループを変更して、UDP ポート 8125 が サービスマシンでオープンするように設定する必要があります。 下記でこの 2 つの設定変更手順について説明します。
次のセクションに進む前に、AWS コンソールの EC2 サービスセクションにログインする必要があります。 必ず、CircleCI Server の実行に使用する領域にログインしてください。 |
サービスマシンのセキュリティグループの更新
-
左のサイドバーで、[Instances (インスタンス)] グループの下にある [
Instances (インスタンス)
] リンクを選択します。 -
Services Box のインスタンスを選択します。 [name (名前)] タグは通常、
circleci_services
のように表示されています。 -
ページ下部の [description (説明)] ボックスで、[
Security Groups (セキュリティグループ)
] セクションの隣にあるユーザーセキュリティグループのリンクを選択します。 通常、*_users_sg
のように表示されています。 -
これにより、[Security Groups (セキュリティグループ)] ページに移動し、ユーザーセキュリティグループが強調表示されます。 ページ下部の [description (説明)] ボックスで、[
Inbound (インバウンド)
] タブを選択してから [Edit (編集)
] ボタンを選択します。 -
[
Add a Rule (ルールを追加する)
] ボタンを選択します。 ドロップダウンから [Custom UDP Rule (カスタム UDP のルール)
] を選択します。 [Port Range (ポートの範囲)] フィールドに「8125
」と入力します。 -
[source (ソース)] フィールドには、いくつかのオプションが用意されています。 VPC とサブネットの設定を考慮してオプションを選択してください。 一般的なシナリオを以下に示します。
-
(推奨) Nomad クライアントサブネットからのトラフィックを許可します。 通常は、ポート 4647 または 3001 に使用されるエントリに一致させます。 たとえば、
10.0.0.0/24
などです。 -
UDP ポート 8125 へのすべてのトラフィックで
0.0.0.0/0
を使用することを許可します。
-
-
[
Save (保存する)
] ボタンを押します。
AWS 起動設定の更新
前提条件
AWS EC2 起動設定 の ID
-
左のサイドバーで [
Auto Scaling Groups (Auto Scaling グループ)
] (ASG) リンクを選択します。 -
[name (名前)] タグに
*_nomad_clients_asg
のような値が表示されている ASG を探します。 -
起動設定名が ASG 名の隣に表示されます (例:
terraform-20180814231555427200000001
)。
AWS EC2 Services Box のプライベート IP アドレス
-
左のサイドバーで、[Instances (インスタンス)] グループの下にある [
Instances (インスタンス)
] リンクを選択します。 -
Services Box のインスタンスを選択します。 [name (名前)] タグは通常、
circleci_services
のように表示されています。 -
ページ下部の [description (説明)] ボックスに表示されているプライベート IP アドレスをメモします。
起動設定の更新
-
左のサイドバーで、[
Auto Scaling
] の下にある [Launch Configurations (起動設定)
] リンクを選択します。 前の手順で取得した起動設定を選択します。 -
ページ下部の [description (説明)] ボックスで、[
Copy launch configuration (起動設定をコピーする)
] ボタンを選択します。 -
Once the configuration page opens, select
3. Configure details
link located at the top of the page. -
[
Name (名前)
] フィールドをnomad-builder-with-metrics-lc-DATE
などのわかりやすい名前で更新します。 -
[
Advanced Details (詳細情報)
] ドロップダウンを選択します。 -
下のテキストフィールドから [
User data (ユーザーデータ)
] に起動設定スクリプトをコピー&ペーストします。 -
*重要:*10行目に Services Box のプライベート IP アドレスを入力してください (例:
export SERVICES_PRIVATE_IP="192.168.1.2"
)。 -
[
Skip to review (レビューに進む)
] ボタンを選択し、次に [Create launch configuration (起動設定を作成する)
] ボタンを選択します。
#!/bin/bash
set -exu
export http_proxy=""
export https_proxy=""
export no_proxy=""
export aws_instance_metadata_url="http://169.254.169.254"
export PUBLIC_IP="$(curl $aws_instance_metadata_url/latest/meta-data/public-ipv4)"
export PRIVATE_IP="$(curl $aws_instance_metadata_url/latest/meta-data/local-ipv4)"
export DEBIAN_FRONTEND=noninteractive
UNAME="$(uname -r)"
export CONTAINER_NAME="nomad_metrics"
export CONTAINER_IMAGE="circleci/nomad-metrics:0.1.198-5f5befe"
export SERVICES_PRIVATE_IP=""
export NOMAD_METRICS_PORT="8125"
echo "-------------------------------------------"
echo " Performing System Updates"
echo "-------------------------------------------"
apt-get update && apt-get -y upgrade
echo "--------------------------------------"
echo " Installing NTP"
echo "--------------------------------------"
apt-get install -y ntp
# Use AWS NTP config for EC2 instances and default for non-AWS
if [ -f /sys/hypervisor/uuid ] && [ `head -c 3 /sys/hypervisor/uuid` == ec2 ]; then
cat <<EOT > /etc/ntp.conf
driftfile /var/lib/ntp/ntp.drift
disable monitor
restrict default ignore
restrict 127.0.0.1 mask 255.0.0.0
restrict 169.254.169.123 nomodify notrap
server 169.254.169.123 prefer iburst
EOT
else
echo "USING DEFAULT NTP CONFIGURATION"
fi
service ntp restart
echo "--------------------------------------"
echo " Installing Docker"
echo "--------------------------------------"
apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt-get install -y "linux-image-$UNAME"
apt-get update
apt-get -y install docker-ce=5:18.09.9~3-0~ubuntu-xenial
# force docker to use userns-remap to mitigate CVE 2019-5736
apt-get -y install jq
mkdir -p /etc/docker
[ -f /etc/docker/daemon.json ] || echo '{}' > /etc/docker/daemon.json
tmp=$(mktemp)
cp /etc/docker/daemon.json /etc/docker/daemon.json.orig
jq '.["userns-remap"]="default"' /etc/docker/daemon.json > "$tmp" && mv "$tmp" /etc/docker/daemon.json
sudo echo 'export http_proxy="${http_proxy}"' >> /etc/default/docker
sudo echo 'export https_proxy="${https_proxy}"' >> /etc/default/docker
sudo echo 'export no_proxy="${no_proxy}"' >> /etc/default/docker
sudo service docker restart
sleep 5
echo "--------------------------------------"
echo " Populating /etc/circleci/public-ipv4"
echo "--------------------------------------"
if ! (echo $PUBLIC_IP | grep -qP "^[\d.]+$")
then
echo "Setting the IPv4 address below in /etc/circleci/public-ipv4."
echo "This address will be used in builds with \"Rebuild with SSH\"." mkdir -p /etc/circleci
echo $PRIVATE_IP | tee /etc/circleci/public-ipv4
fi
echo "--------------------------------------"
echo " Installing nomad"
echo "--------------------------------------"
apt-get install -y zip
curl -o nomad.zip https://releases.hashicorp.com/nomad/0.9.3/nomad_0.9.3_linux_amd64.zip
unzip nomad.zip
mv nomad /usr/bin
echo "--------------------------------------"
echo " Creating config.hcl"
echo "--------------------------------------"
export INSTANCE_ID="$(curl $aws_instance_metadata_url/latest/meta-data/instance-id)"
mkdir -p /etc/nomad
cat <<EOT > /etc/nomad/config.hcl
log_level = "DEBUG"
name = "$INSTANCE_ID"
data_dir = "/opt/nomad"
datacenter = "default"
advertise {
http = "$PRIVATE_IP"
rpc = "$PRIVATE_IP"
serf = "$PRIVATE_IP"
}
client {
enabled = true
# Expecting to have DNS record for nomad server(s)
servers = ["$SERVICES_PRIVATE_IP:4647"]
node_class = "linux-64bit"
options = {"driver.raw_exec.enable" = "1"}
}
telemetry {
publish_node_metrics = true
statsd_address = "$SERVICES_PRIVATE_IP:8125"
}
EOT
echo "--------------------------------------"
echo " Creating nomad.conf"
echo "--------------------------------------"
cat <<EOT > /etc/systemd/system/nomad.service
[Unit]
Description="nomad"
[Service]
Restart=always
RestartSec=30
TimeoutStartSec=1m
ExecStart=/usr/bin/nomad agent -config /etc/nomad/config.hcl
[Install]
WantedBy=multi-user.target
EOT
echo "--------------------------------------"
echo " Creating ci-privileged network"
echo "--------------------------------------"
docker network create --driver=bridge --opt com.docker.network.bridge.name=ci-privileged ci-privileged
echo "--------------------------------------"
echo " Starting Nomad service"
echo "--------------------------------------"
service nomad restart
echo "--------------------------------------"
echo " Setting up Nomad metrics"
echo "--------------------------------------"
docker pull $CONTAINER_IMAGE
docker rm -f $CONTAINER_NAME || true
docker run -d --name $CONTAINER_NAME \
--rm \
--net=host \
--userns=host \
$CONTAINER_IMAGE \
start --nomad-uri=http://localhost:4646 --statsd-host=$SERVICES_PRIVATE_IP --statsd-port=$NOMAD_METRICS_PORT --client
Auto Scaling グループの更新
-
左のサイドバーで [
Auto Scaling Groups (Auto Scaling グループ)
] (ASG) リンクを選択します。 -
[name (名前)] タグに
*_nomad_clients_asg
のような値が表示されている ASG を選択します。 -
ページ下部の [description (説明)] ボックスで、[
Edit (編集する)
] ボタンを選択します。 -
ドロップダウンから、新たに作成した起動設定を選択します。
-
[
Save (保存する)
] ボタンを押します。 -
この時点で、古い Nomad クライアントインスタンスはシャットダウンを開始し、 Nomad メトリクスを実行する新しい Nomad クライアントに置き換えられます。
StatsD メトリクス
StatsD により送信されたメトリクスは 10秒ごとに更新されます。 |
--server
終了状態 (complete と dead ) にあるジョブの数は、通常、Nomad がその状態からジョブをガベージコレクションするまで増えていきます。 |
名前 | タイプ | 説明 |
---|---|---|
| ゲージ | Nomad エージェントの最後のポーリングが失敗した場合は 1、そうでない場合は 0 が返されます。 このゲージは、Nomad メトリクスが |
| ゲージ | クラスタ全体の保留中のジョブの総数を返します。 |
| ゲージ | クラスタ全体の実行中のジョブの総数を返します。 |
| ゲージ | クラスタ全体の完了したジョブの総数を返します。 |
| ゲージ | クラスタ全体で停止しているジョブの総数を返します。 |
--client
名前 | タイプ | 説明 |
---|---|---|
| ゲージ | Nomad エージェントの最後のポーリングが失敗した場合は 1、そうでない場合は 0 が返されます。 |
| ゲージ | (以下の説明を参照してください) |
| ゲージ | (以下の説明を参照してください) |
| ゲージ | (以下の説明を参照してください) |
| ゲージ | (以下の説明を参照してください) |
| ゲージ | (以下の説明を参照してください) |
| ゲージ | (以下の説明を参照してください) |
| ゲージ | (以下の説明を参照してください) |
| ゲージ | (以下の説明を参照してください) |
| ゲージ | (以下の説明を参照してください) |
| ゲージ | (以下の説明を参照してください) |
| ゲージ | (以下の説明を参照してください) |
| ゲージ | (以下の説明を参照してください) |
|
ドキュメントの改善にご協力ください
このガイドは、CircleCI の他のドキュメントと同様にオープンソースであり、 GitHub でご利用いただけます。 ご協力いただき、ありがとうございます。
- このページの編集をご提案ください (最初に「コントリビューションガイド」をご覧ください)。
- ドキュメントの問題点を報告する、またはフィードバックやコメントを送信するには、GitHub で issue を作成してください。
- CircleCI は、ユーザーの皆様の弊社プラットフォームにおけるエクスペリエンスを向上させる方法を常に模索しています。 フィードバックをお寄せいただける場合は、リサーチコミュニティにご参加ください。
サポートが必要ですか
CircleCI のサポートエンジニアによる、サービスに関する問題、請求およびアカウントについての質問への対応、設定の構築に関する問題解決のサポートを行っています。 サポートチケットを送信して、CircleCI のサポートエンジニアにお問い合わせください。日本語でお問い合わせいただけます。
または、 サポートサイト から、サポート記事やコミュニティフォーラム、トレーニングリソースをご覧いただけます。
CircleCI Documentation by CircleCI is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.