isucon12予選過去問をやる
環境構築は下記と同じ。
環境
- M1 Mac端末
AWSでパブリックAMIからEC2インスタンスを起動
セキュリティグループを作成
インバウンド、アウトバウンド共にすべてのトラフィックを許可するセキュリティグループを作成しておく(あくまで検証用の設定。実務ではちゃんと絞るべきもの)。VPCやサブネットはデフォルトのものを使う。
AMIからEC2インスタンス起動
AWSマネジメントコンソールでEC2を開く。メニューからAMIを選択しパブリックイメージ→ ami-0734085295d5c2e92
(aws-isucon一覧にあるisucon12-qualify AMIの識別子)を入力し検索。
すると目当てのAMIが1件ヒットするのでそこからEC2インスタンスを起動する。
- 今回はインスタンスタイプ
t2.meduim
を選択 - ネットワーク周りはセキュリティグループ以外はデフォルトの値のままにする
- セキュリティグループは先ほど作成した全許可のものをセットする
-
isucon12-qualify
という名前(何でも良い)でKey pairを作成しpemファイルをダウンロードしておく
上記設定で起動ボタンを押下。
EC2インスタンスに割り振られたドメインを控えておく。
sshする
ダウンロードしたpemファイルを ~/.ssh
に置く。pemの権限を適切に設定しておく。
mv ~/Downloads/isucon-practice.pem ~/.ssh/
chmod 400 ~/.ssh/isucon-practice.pem
参考: https://qiita.com/mountcedar/items/43157ff1225c56500655
先ほど控えたドメインにubuntuユーザでsshする。
ssh -i ~/.ssh/isucon-practice.pem ubuntu@ec2-xx-xx-xxx-xxx.ap-northeast-1.compute.amazonaws.com
sudo su - isucon
ベンチマークする
cd bench
./bench
初期ベンチ結果
SCORE: 2478 (+2478 0(0%))
モニタリングツールを入れていく。
Prometheusを入れてみる。
まずはローカルでWeb UIを見れるようにしてみる。
prometheus/prometheus: The Prometheus monitoring system and time series database.
DockerでPrometheusを立ち上げる。
docker run --name prometheus -d -p 127.0.0.1:9090:9090 prom/prometheus
以下のエラーが発生。
docker: Error: remote trust data does not exist for docker.io/prom/prometheus: notary.docker.io does not have trust data for docker.io/prom/prometheus.
See 'docker run --help'.
dockerでWhalesayイメージがpull(run)できない時の対処法 - Qiita
~/.zshrc
に以下を追記。セキュリティ的には非推奨の設定と思われるが、ISUCON練習目的ということで割り切る。
export DOCKER_CONTENT_TRUST=0
doker runを再実行すると成功。
http://localhost:9090 を開くとWeb UIが見れる。
続いてEC2インスタンス側にnode_exporterを入れたい。
prometheus/node_exporter: Exporter for machine metrics
Prometheusの監視対象サーバにnode_exporterをセットアップする手順
インスタンスにsshした状態で以下を実行。
curl -OL https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar xzvf node_exporter-1.6.1.linux-amd64.tar.gz
cd node_exporter-1.6.1.linux-amd64
sudo mv node_exporter /usr/local/bin/
以後、 node_exporter
コマンドが使えるようになる。
セキュリティグループ・ネットワークACLを、ローカルから9100ポートにアクセスできる状態にしておく。
インスタンスで node_exporter
を実行した状態で、ローカルから
curl {インスタンスIP}:9100
を実行して疎通確認。
<header>
<h1>Node Exporter</h1>
</header>
などが表示されればOK。
http://localhost:3000 にアクセスしGrafanaを開く。IDとPW admin
でログインする。
まずはDatasourceを作成する。
- トップページからDatasourceを選択
- Prometheusを選択
- URLに
http://host.docker.internal:9090
を入力しSave&Testを押下
http://host.docker.internal:9090
については以下のIssueより。
続いてDashboardを作成する。
- 左メニューを開きDashboardsを選択
- New->Importを選択。 https://grafana.com/grafana/dashboards/1860-node-exporter-full を使用したいのでImport via grafana.comに
1860
を入力。Loadを押下 - Datasourceに先程作成したものを選択しImportを押下