タグ

ブックマーク / christina04.hatenablog.com (11)

  • Prometheus で独自メトリクスを用意する - Carpe Diem

    概要 Metric types | Prometheus で定義されているようにPrometheusでは大きく4つのメトリクスタイプがあります。 Counter Gauge Summary Histogram 今回はGoのPrometheusクライアントライブラリを用いて各メトリクスを独自で用意する方法を説明します。 環境 Prometheus 2.11.1 Golang 1.12.7 prometheus/client_golang 1.0.0 expose まずはPrometheusが監視対象のメトリクスをPullできるよう/metricsのエンドポイントを用意します。 公式クライアントとしてpromhttpというライブラリが提供されているのでそれを使います。 package main import ( "log" "net/http" "github.com/prometheus/c

    Prometheus で独自メトリクスを用意する - Carpe Diem
  • Kubernetesを扱う上で便利なツール - Carpe Diem

    概要 Kubernetesを利用する上であったら便利なツールの紹介です。 stern kubectx kubens kube-tmux stern podのログを簡単に取れるツールです。 github.com インストール $ brew install stern 使い方 $ stern xxx という感じで、xxxにpod名の一部を入れれば表示してくれます。 部分一致なので正確なpod名じゃなくて済むので便利です。 tailのように常にwatchしてくれるので、デプロイ時の監視にも便利です。 kubectx クラスタ(context)を簡単に切り替えできるツールです。 インストール $ brew install kubectx 使い方 USAGE: kubectx : list the contexts kubectx <NAME> : switch to context <NAME>

    Kubernetesを扱う上で便利なツール - Carpe Diem
    dann
    dann 2020/11/07
  • Goのpprofの使い方【基礎編】 - Carpe Diem

    概要 pprofの使い方の備忘録として何回かに分けて書いてきます。 今回は前提知識として知っておくべきことを書きます。 環境 go 1.10.1 pprofは2つの計測方法がある 以下の2つのやり方があります。 runtime/pprof が提供しているAPIを使ってファイルに出力する net/http/pprof を使ってプロファイル取得用の http サーバーを立てる 前者は短時間で実行が終了するようなケースで使います。 後者はWebサーバのようにずっと動かすプログラムのケースで使います。 手順 基的な手順は以下です。 コードにプロファイラを埋め込む プログラムを動かしている間にプロファイルの取得 プロファイルの解析 runtime/pprofの場合 runtime/pprofを使いやすい形にラップしている以下のライブラリを使います。 github.com デフォルトではCPU Pr

    Goのpprofの使い方【基礎編】 - Carpe Diem
    dann
    dann 2020/02/22
  • EnvoyのFrontProxyを用意してgRPCの負荷分散をする - Carpe Diem

    概要 gRPCはHTTP/2プロトコルをベースとしたRPCです。 なのでコネクションが永続化され、その中で複数のストリームがリクエスト・レスポンスを取り扱うため負荷分散に注意する必要があります。 今回はEnvoyというgRPCに向いたproxyを使うことでそれを実現します。 環境 envoy 1.7.0 成果物 今回のソースはこちらにあります。 github.com AWSでの問題点 AWSのロードバランサーは主にCLB、ALB、NLBがあります。 しかしながらそれぞれ NLBはL4のロードバランサであるため、コネクションを分散することはできてもリクエストレベル(ストリーム)で負荷分散ができない CLBのL4モードも同様 ALBはL7だが、HTTP/2の転送がそもそもできない という問題を持つため、gRPCでの負荷分散に向いていません。 そこでgRPCで通信する場合はELBを使わずにEnv

    EnvoyのFrontProxyを用意してgRPCの負荷分散をする - Carpe Diem
    dann
    dann 2019/06/24
  • .proto ファイルの整形に clang-format を使う - Carpe Diem

    概要 gRPCで通信しようとすると.protoファイルが沢山出てきます。 ただ人によってインデントが異なったりするのは良くないので、何かしらformatterが無いかなと探したら github.com こちらのissueで「Googleではclang-formatを使ってるよ」という回答があったのでそれを使ってみます。 環境 macOS Mojave 10.14.2 clang-format 8.0.0 設定 インストール brew でインストールできます。 $ brew install clang-format 使い方 $ xargs clang-format -i foo.proto で整形できます。ディレクトリ丸ごと実行したい場合は./proto/ディレクトリで定義しているとすると $ find ./proto/ -name "*.proto" | xargs clang-forma

    .proto ファイルの整形に clang-format を使う - Carpe Diem
  • エイリアスを用いたマッピング変更 - Carpe Diem

    概要 仕様変更でフィールドの追加やマッピングの変更など発生しますが、Elasticsearch に関わらずほとんどの検索エンジンは検索・インデックス仕様の変更をする際、インデクスを再作成する必要があります。 エイリアスを利用すると、その変更をダウンタイム0でできるようになります。 環境 Ubuntu 14.04 ElasticSearch 1.4.2 基的な流れ 古いインデクスにエイリアスを付けて、エイリアスを検索インデクスとして使用する 新しいインデクスを作成 古いインデクスのデータを新しいインデクスにコピー エイリアスを新しいインデクスに付け替える 古いインデクスを削除する 古い方のインデクスを用意 マッピング 公式サイトのダミーデータを使うやり方でやります。 $ curl -XPUT http://localhost:9200/shakespeare -d ' { "mapping

    エイリアスを用いたマッピング変更 - Carpe Diem
  • grpc-gatewayでgRPCサーバをRESTで叩けるようにする - Carpe Diem

    概要 gRPCはProtocol Buffersを喋るもの同士ではメリットが大きいですが、RESTしか叩け無いものや、curlでRESTを叩くようにサクッと検証したかったりするときに不便です。 そんな問題を解消してくれるのがgrpc-gatewayで、protobuf定義からREST APIを提供するリバースプロキシを生成してくれます。 github.com 環境 golang 1.9.2 protobuf 3.5.0 grpc 1.7.2 grpc-gateway 1.3.0 成果物 今回のコードはこちらです。 github.com 実装 proto 死活監視用のサービスと、ユーザ情報に関するサービスの2つを用意してみます。 RESTのエンドポイントとしては GET /alive GET /user/{id} GET /user PUT /user/{id} です。 alive.prot

    grpc-gatewayでgRPCサーバをRESTで叩けるようにする - Carpe Diem
    dann
    dann 2017/11/26
  • Packer で AWS の AMI を作成する - Carpe Diem

    概要 AWSのAMIをPackerから作ります。基的にAnsibleで使用するパッケージをインストールします。 簡単のためNginxだけインストールしたAMIを作ります。 Packerのインストールは「Packer で Virtualbox 用の VagrantBox を作成する」を参考にしてください。 環境 Ubuntu 14.04 Packer 0.7.5 フォルダ構成 ├── builders │   ├── nginx.json │   └── variables.json ├── provisioners │   ├── inventory │   │   └── aws │   ├── nginx.yml │   └── roles │   └── nginx │   └── tasks │   └── main.yml └── scripts └── ansible.sh

    Packer で AWS の AMI を作成する - Carpe Diem
  • ECSでコンテナのrolling update - Carpe Diem

    概要 ECS上のコンテナをダウンタイム0で更新(デプロイ)する方法をまとめます。 環境 ALB ECS container agent 1.13.0 Docker 1.11.2 Amazon ECS Container Agent Versions - Amazon EC2 Container Service ポイント minimumHealthyPercentとmaximumPercentを適切に設定する connection drainingを適切な長さにする この2つを意識していればOKです。 minimumHealthyPercentとmaximumPercentを適切に設定する desiredCount: 4、min: 0%、max: 100%の場合 この場合最低0つ(0%)まで縮小し、最高でも4つ(100%)までしか増えない状態で更新するということになります。 つまりダウンタイ

    ECSでコンテナのrolling update - Carpe Diem
    dann
    dann 2016/11/05
  • Kibanaの運用で注意すること - Carpe Diem

    概要 Kibanaをログ可視化&検索として扱う上でいくつかの問題が生じたので、その時の対処方法をまとめます。 ログ可視化という用途であればレスポンス速度などの優先度は下げられるため、以下の対応が可能になります。 環境 Ubuntu 14.04 Elasticsearch 2.1.1 Kibana 4.3.1 問題1:OutOfMemoryErrorが出る field data cacheのサイズを絞る SortやAggregation(集計)を高速に行うために、各fieldのデータをメモリに載せていますがデフォルトだと無制限に載るため調整します。 /etc/elasticsearch/elasticsearch.yml indices.fielddata.cache.size: 75% ※ 下記のdoc_valuesを使うのであれば設定は不要です doc_valuesを使う キャッシュの際

    Kibanaの運用で注意すること - Carpe Diem
  • CuratorでElasticsearchのインデックスを削除 - Carpe Diem

    概要 Kibanaを使う上でデータ容量が問題になってきます。 可視化やログ調査に必要な分のみ残し、古いインデックスを定期的に削除する必要があります。 Curatorはそのためのツールです。 環境 Elasticsearch 2.2.0 Curator 3.4.1 インストール pipからのインストールを推奨しているため、まずはpipをインストールします。 $ wget https://bootstrap.pypa.io/get-pip.py $ sudo python get-pip.py curatorをインストールします。 $ sudo pip install elasticsearch-curator インデックスの削除 $ curator --host example.com delete indices --prefix logstash --older-than 30 --ti

    CuratorでElasticsearchのインデックスを削除 - Carpe Diem
  • 1