Carpe Diem

備忘録

2020-01-01から1年間の記事一覧

Prometheus でカスタムコレクタを用意する

概要 以前↓の独自メトリクスを作る方法を紹介しました。 christina04.hatenablog.com これはdirect instrumentation(直接計装)というやり方で、アプリケーションサーバ自体がstatsを持ちprometheusにデータを渡すやり方です。 今回はそうではなく別プロセ…

AWKの基本的な使い方

awk

概要 AWKは文字列の検索、抽出、変換などができるプログラミング言語です。 Unix、Linuxは基本的にテキストをプロトコルとしています。AWKを扱えるとそのプロトコルをより柔軟に扱えることになります。 前提知識 あらかじめ知っておくべき知識を書いていきま…

cgroupsでリソース制限

概要 cgroups (control groups)は、プロセスグループのリソース(CPU、メモリ、ディスクI/O、ネットワークなど)を制限、考慮、分離するLinuxカーネル機能です。 これを使ってプロセスのリソース制限を行ってみます。 環境 Ubuntu 18.04.3 cgroupsの構成 cgr…

Macのsudoでパスワード入力でなくTouch IDを使う

概要 MacにはTouch IDがあり、インストールなど様々なところでこれまでパスワード入力が必要だった箇所がTouch IDによる指紋認証が使えるようになっています。 その中でターミナルでのsudoのパスワード入力もTouch IDに替えることができるので対応します。 …

PAM (Pluggable Authentication Modules)

概要 LinuxにはPAMという認証システムとアプリケーションを分離するための仕組みが用意されています。 ref: https://docs.oracle.com/cd/E19253-01/819-0396/ch3pam-01/index.html プラガブルという名前の通り、モジュールによって認証方法を簡単に切り替え…

gRPCのヘルスチェック

概要 gRPCサーバのヘルスチェック方法として HTTPサーバを別途立ち上げてHTTPでチェック tcpでポートがopenしたかチェック といった方法がありますが、前者はgRPCサーバなのにHTTPサーバを用意しないといけなかったり、後者はtcpのopenは実際にServe開始した…

iptablesの仕組みを図解

概要 ネットワーク周りでたまに触るiptablesですが、たまになせいで度々忘れてググり直すことが多いので理解しやすいよう図を作ってみました。 iptablesの仕組みを図解 iptablesの構成図 iptablesは以下のように iptables -> Tables -> Chains -> Rules とい…

Network Namespaceから外部ネットワークへアクセスする

概要 前回の christina04.hatenablog.com の続きで、今回はネットワーク名前空間から外部ネットワークへアクセスできるようにします。 環境 Ubuntu 18.04 以下の状態からスタートします。

Network NamespaceにBridge経由でアクセスする

概要 前回 christina04.hatenablog.com でネットワーク名前空間の機能に触れてみました。 今回はブリッジを挟んでアクセスするネットワーク環境を構築してみます。 環境 Ubuntu 18.04

ip netnsコマンドで学ぶNetwork Namespace

概要 Linuxには名前空間(Namespace)というカーネルの機能が提供されています。 これは1つのプロセスが1つのリソースセットを参照し、別のプロセスが異なるリソースセットを参照するようにカーネルリソースを分割する機能です。 その中の1つであるネット…

gRPCでのLoad Balancing

背景 gRPCでは主に Proxy Model Balancing-aware Client External Load Balancing Service といったLBアプローチがあります。 それぞれの特徴や実装方法を調べてみました。 Load Balancingアプローチ こちらで定義されてます。 grpc/load-balancing.md at ma…

gRPCでのClient-Side LB実装の変遷

概要 gRPCでのバランシングをClient-Sideで直接実装する方法の紹介です。 gRPCはPolyglot(様々な言語で扱う)を意識しているので、gRPC自体の仕様が策定→各言語がそれに則って実装となります。 なので「元々はこういう実装だったけど、他の言語と統一してこ…

go modulesでコマンドラインツールのバージョン管理をする

Go

概要 goはModulesでリポジトリのライブラリのバージョン管理を行えます。 ただコマンドラインツールに関してはgo getしてgo.modに追加されても、goファイルで扱っているわけではないのでgo mod tidyすると消えてしまいます。 しかしながら「この機能は最新の…

GoのDIツールwireで知っておくと良いこと

Go DI

概要 christina04.hatenablog.com こういった設計のようにレイヤ間の依存関係を抽象化していると、DIの初期化処理が段々冗長になっていきます。 google/wireはそういったDIの初期化を自動的にやってくれるコード生成ツールです。 今回はwireを使う上で知って…

vim-goからvim-lspへ移行しました

概要 vim-goからvim-lspへ移行する時に問題になってたところを全部mattnさんが解決してくださってたのでようやく完全移行したという話です。 環境 vim 8.2 go 1.13.5 これまでの課題 vim-goの問題点 2014年からgoを触っていましたが当時はvim-go一択で、しか…

MacでのGithubリポジトリのcloneを自動化

背景 パソコンを新調した時に大変なのが ツールやアプリのインストール Githubのリポジトリのclone です。 前者に関してはhomebrewが提供しているbrew bundleである程度対応できます。 後者でghqはdump, restore的な機能ってあるのかな?と思って探したのが…