タグ

ブックマーク / udzura.hatenablog.jp (17)

  • PrometheusのExporter周りをまとめる - ローファイ日記

    Mackerelの3周年(おめでとうございます!)、OSSではPrometheusの隆盛もあり、監視やモニタリング周りが話題になっているのを観測している。皆さんは、監視されていますか? 個人的にも最近はロリポップ!マネージドクラウド周りの開発などでPrometheusを触っているので、今日はPrometheusの肝とも言えるExporterに関してまとめる。 Prometheusその他監視周りについて、以前、スライドも作りはしたが、割と自分向けのメモ書きに毛が生えたような感じではあったので、もう少し詳細なメモ書きを残すなど。 Exporterの選択肢について 既存Exporter 基的に、Prometheusのコミュニティは強く、たいていの監視には既存のExporterが存在する。なのでまずはWikiのリストをチェックするのが良さそう。 prometheus.io その中でもGitHub

    PrometheusのExporter周りをまとめる - ローファイ日記
  • cgroup経由でシステムの利用状況を知る - CPU編 - ローファイ日記

    システム全体の負荷を計測する方法は、ロードアベレージ、topなどprocpsスイート、sysstat系のツールなど色々あるが、特定のコンテナ単位での負荷状況を知りたい。 コンテナ単位というのはつまり、cgroupの仕組みを用いて、一つのコンテナに所属しているプロセス群という形でグルーピングした単位を指す。人間は、その単位でリソースの利用を制限したり、その中での利用状況を取得したりできます。その仕組みをいじった結果を、今回整理しておく。 計測用のコンテナ Haconiwa でこういう感じで作る。 # cgroup.haco haconiwa = Haconiwa.define do |config| config.name = "stats-tester" # to be hostname config.init_command = ["/usr/bin/ruby", "-e", "def

    cgroup経由でシステムの利用状況を知る - CPU編 - ローファイ日記
  • mrubyとseccompとptraceでシステムコールをとにかく追いかける - ローファイ日記

    世の中にはseccompというものがあり、知られています。皆さんはBPFですか。人は、、、 seccompについては以前書きました。Linuxのシステムコール呼び出しをフィルタリングして許可したり禁止したりするものです。 udzura.hatenablog.jp さて今回、拙作 mruby-seccomp で SCMP_ACT_TRACE アクションをサポートしました。その辺の話をしてみます。 libseccompのコンテクストに SCMP_ACT_TRACE のアクションを追加してロードすると、当該システムコールの呼び出しを ptrace(2) でトレースできます。 ptrace(2) は普通、あらゆるシステムコールを SIGTRAP で止めるみたいな動きをしますが、特定のシステムコールのみを停止でき、またシグナルも SIGTRAP ではなく別のものとすることができます。 ptrace(

    mrubyとseccompとptraceでシステムコールをとにかく追いかける - ローファイ日記
  • straceがどうやってシステムコールの情報を取得しているか - ローファイ日記

    興味があって調べていたら、少しだけ分かったのでまとめておきます。当然間違った箇所もある、あと考慮が漏れている箇所もあるかと思いますのでツッコミをお願いします… ptrace(2) システムコール strace の核となるシステムコールは ptrace(2) である。ptrace(2)を用いることで、あるプロセスを別のプロセスから監視し、シグナルごとに停止してレジスタやメモリの状態を観察したり変更したりできる。gdbのようなデバッガのブレークポイント、あるいはまさにstraceのような目的で利用される。 大まかな利用方法としては、親プロセスの ptrace(PTRACE_ATTACH, pid, ...) (または子プロセスの ptrace(PTRACE_TRACEME, 0...))によりトレースが開始し、wait()などで停止を待ってから様々な設定を親から送り、 ptrace(PTRAC

    straceがどうやってシステムコールの情報を取得しているか - ローファイ日記
  • Linuxプログラミングインターフェースを読んだ(一周目) - ローファイ日記

    読みきった。一周目の所感を書く。 Linuxプログラミングインタフェース 作者: Michael Kerrisk,千住治郎出版社/メーカー: オライリージャパン発売日: 2012/12/01メディア: 大型 クリック: 14回この商品を含むブログ (7件) を見る モチベーション ぼくは、小さい会社でWebサービスの開発もしつつLinuxのサバ管も少ししつつ、という人間だったので、Linuxに開眼して真髄を会得したい、という欲求が長らくあった。例えば青木さんのであったり、なるほどUnixであったり。 ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道 作者: 青木峰郎出版社/メーカー: ソフトバンククリエイティブ発売日: 2005/07/27メディア: 単行購入: 35人 クリック: 450回この商品を含むブログ (150件) を見る tatsu

    Linuxプログラミングインターフェースを読んだ(一周目) - ローファイ日記
  • Cレベルのライブラリコールを“Hijack”してみる その1。 - ローファイ日記

    Rubyの、 Time.now は最終的には clock_gettime(3) を呼び出しているそうな。 masterの当該箇所 Time.now は Time.new を無引数で呼び出しているに過ぎない ここで、 Time#initialize の実態は time_init time_init は引数がない場合 time_init_0 を呼ぶ time_init_0 は timespec 構造体のポインタを引数に rb_timespec_now を呼ぶ rb_timespec_now で clock_gettime(3) が使えるシステムであればそれを呼ぶ。そうでない場合 gettimeofday(2) らしい… ここで、以下のような小さなCのコードを書く。 /* man になかったけどこの宣言がないと RTLD_NEXT が定義されなかった */ #define _GNU_SOURCE

    Cレベルのライブラリコールを“Hijack”してみる その1。 - ローファイ日記
  • 2016年をまとめる - ローファイ日記

    前回の記事で2015年までの振り返りを振り返るなどしたので、いよいよ今年を振り返ろうと思う。割とお仕事寄りで振り返る。 udzura.hatenablog.jp 人間たちへの研修との関わり ペパボの新卒研修はおかげさまで一定の評判を得ているようだが、一環として5月に「福岡研修」というものを行う。今年はその取りまとめをした。 これはその時に行った海です。 www.instagram.com 「番長」という漠然とした立場でかかわったが、その実態は: 研修のゴールを決め、各メニューの大枠を考え、効果を測定するプロダクトオーナー的何か さらにメニューの各枠について福岡支社の人々を巻き込み、指示を出してるくってもらうプロジェクトオーナー的何か さらに新卒一年目の人々の様々な思いをフォローアップするメンター的何か こうやって書くとどうやって一人でやったのかよくわからない感じもするが、結果は反省点はあれ

    2016年をまとめる - ローファイ日記
  • AppArmorとDockerとその他コンテナ的プロセスについて調べた - ローファイ日記

    ここ数日のAppArmorに関する調査をまとめておく。アドベントカレンダーの季節だけど、特に該当しそうなカレンダーがなかったのでただの記事を書きます... 突っ込みどころはあると思うので、修正指摘等お気軽に。 AppArmor とは AppArmorはMAC(Mandatory Access Control - 強制アクセス制御)を実現するためのミドルウェアの一つ。同じようにMACを実現するものにはSELinuxなどがあるが、AppArmorはシステム全体というよりはプログラム単位で、ファイル別またはプロセスごとにセキュリティプロファイルを紐づけることができる。 そのプロファイルでは: どのファイルにどのようにアクセスできるか/できないか(読み書き実行など) ネットワークやRaw Socketなどへのアクセスができるか 以上についてUNIXのファイル権限やKernel Capability

    AppArmorとDockerとその他コンテナ的プロセスについて調べた - ローファイ日記
  • fusuma/mruby-fuseでFUSEを簡単に試す - ローファイ日記

    mruby Advent Calendar 2016 の 2日目の記事です。 昨日は おごもりさんのRuby Miniature Book の記事でした。 今日は、最近こそこそ作っているfusumaとmruby-fuseが、なんとなく面白いおもちゃにはなってきたので、せっかくということで紹介したいと思います。 fusuma (FUSe Upon Mruby-script Assistance) github.com mrubyとFUSEを用いて、ファイルシステムを作れるコマンドベースのミドルウェアです。 インストールはx86_64なLinuxバイナリは用意してありますのでひとまずそちらを解凍し、パスの通るところに配置すればOKです。各ディストロで fuse/ilbfuse 相当と libcurl 相当を別途インストールす必要があるでしょう。 ダウンロードはこちら とりあえず、libfuse

    fusuma/mruby-fuseでFUSEを簡単に試す - ローファイ日記
  • seccompをmrubyで試す - ローファイ日記

    seccomp とは、Linuxでプロセスのシステムコールの発行を制限する機能のこと。今回試すものはseccomp mode 2と呼ばれる、Linux3.5から搭載されたもので、システムコール単位での制限、特定の条件を満たす引数のみの許可/制限を実現できる。 バックエンドではlibpcapなどでも利用しているBPF(Berkeley Packet Filter)を利用していて、JITなどで高速に動作するらしい。 以下のサイトなども参照のこと。 mmi.hatenablog.com yuzuhara.hatenablog.jp 今回、seccompを利用するためのCライブラリlibseccompを用いて、mruby-seccompを作成した。これを利用してシステムコールの発行制限を試す。 github.com 基的な使い方 基的には、Seccompのコンテクストを作って、ルールを記述し、

    seccompをmrubyで試す - ローファイ日記
  • HaconiwaでDockerのsshdコンテナを利用してみる - ローファイ日記

    こんにちは。これは技術記事です。みなさんは、技術記事ですか? まず、 Haconiwa の近況報告なんですが、この度 mruby で書き直し、ひとまず MRI 版と同じ程度の機能までは実装できました。 github.com これに伴い、Linux用のバイナリを配布する形にインストール方法を変更しました。また、今後MRI版の開発(haconiwa-mri とプロジェクトをリネーム済みです)は積極的には行わない予定です。何か機能追加したい際は mruby 版の方へPRを! (一応、MRI版のリリース記事は以下です) udzura.hatenablog.jp ということで、今日はこのmruby版のHaconiwaを用いて、Dockerのsshdコンテナを再利用してsshdを立ち上げてみる手順を紹介します。 環境について Ubuntu Xenial に Docker をインストールしたマシンをご用

    HaconiwaでDockerのsshdコンテナを利用してみる - ローファイ日記
  • Emacsでmrubyをそこそこ快適に書く - ローファイ日記

    こんにちは、これはEmacs記事です。みなさんはEmacs記事...ではないですよね...。 Haconiwaのおかげですっかりmruby人間になって久しい id:udzura です。 https://t.co/1iLQyn2rV0 バージョン 0.2 系を出しました。rlimit系のリソース制限と、コンテナ内PID=1のuid/gidを変更できます #haconiwarb— Uchio KONDO (@udzura) 2016年7月20日 で、宣伝はこんなくらいにしておきまして、なんとなく流れでセットアップしたEmacsによるmruby環境をこの辺で整理しとこうと思ったので、書きます。というか、ほとんどC言語を書くための環境...。平成が終わるとか終わらないとか言っている2016年にEmacsでC言語を書く環境の記事を書きます。 なお僕は C言語をまともに書いて2ヶ月ぐらいだったり、あと

    Emacsでmrubyをそこそこ快適に書く - ローファイ日記
  • Linux Capability - ケーパビリティについての整理 - ローファイ日記

    Man page of CAPABILITIES を読んで自分なりに整理する。メモ気分で書いているので言葉足らず/用語が曖昧 のところがあればご指摘ください。 3つのケーパビリティセット Inheritable execve(2) (以下、単にexecveと呼ぶこともある) の前後で引き継がれるケーパビリティ Permitted 実効ケーパビリティセットに追加することができるセット。ここから落ちたケーパビリティはどう頑張っても実効状態にできない Effectve 実効ケーパビリティセット。実際にそのスレッドで利用できるケーパビリティの集合 Permittedのセットの中から、実際に有効になっているEffectveのセットをピックアップするイメージ。 また、Inheritableはexecveしなければ関係することはない。 スレッドケーパビリティセット それぞれのスレッドは上述の三つのケーパ

    Linux Capability - ケーパビリティについての整理 - ローファイ日記
  • IPC Namespaceをまたいだプロセス間で、pipeでやりとりする。mrubyで。 - ローファイ日記

    Introduction to Linux namespaces - Part 2: IPC | Yet another enthusiast blog! こういうブログ記事があって、元記事はC言語なんだけど、これと同じことをmrubyでもやってみたサンプル。なお元記事は clone(2) だけど今回はforkしてから unshare(2) している。clone未実装なんで。。 reader, writer = IO.pipe puts " - Hello ?" p = Process.fork do Namespace.unshare(Namespace::CLONE_NEWUTS | Namespace::CLONE_NEWIPC) writer.close reader.read # blocking system "hostname 'In-Namespace'" puts " -

    IPC Namespaceをまたいだプロセス間で、pipeでやりとりする。mrubyで。 - ローファイ日記
  • haconiwaの室内楽 - Re: 自作Linuxコンテナの時代 - ローファイ日記

    haconiwa という、いわゆるLinuxコンテナに関する様々な技術を組み合わせて、自分のためのコンテナを作ることができるRuby製のツールと、そのDSLを作った。ひとまずこれぐらいはやりたいということができていそうなので、バージョン 0.2.0 としてリリースした。 github.com 使い方 ほぼREADMEの日語版。 前提として、以下のライブラリとコマンドが必要になるので入れておいて欲しい。 libcap (libcap.so.2 を FFI 経由で使う) nsenter (yum install util-linux とかそういう感じで入れる) ひとまず動かしたい場合は、rbenvなどが整った環境で、gemとして入れるのがいいと思う。多分Ruby 2.0 以降で動く気がする。 $ gem install haconiwa $ rbenv rehash そして、現在のhacon

    haconiwaの室内楽 - Re: 自作Linuxコンテナの時代 - ローファイ日記
  • 「Hubot + CoffeeScript ではじめるやわらかプログラミング入門」を公開した - ローファイ日記

    よろしくお願いします。 Hubot + CoffeeScript ではじめるやわらかプログラミング入門 社内勉強会で使った死霊資料を社外で問題ないように少し直したもの。なので ほらちゃん とか若者の名前が出ている。 経緯 もともとプログラミング入門みたいな勉強会をしようと思っていたところ、新卒若者勢がプログラミングをやりたい!!! とのことだったので、実験的に社内勉強会をした。 非エンジニアの新卒にプログラミング研修を行いました - pixiv engineering blog という記事を以前見かけたのにも影響されている。カタツイフォロワーである。 よかったところ 新卒ヤング若者だけでなくお兄さんお姐さん達も交えて、普通にプログラミング入門的勉強会にした。そうしたらお兄さんお姐さんたちはわりとその後もボットをいじってくれているみたい 早速某チャンネルでボットが動いて凄かった 逆に若者達は

    「Hubot + CoffeeScript ではじめるやわらかプログラミング入門」を公開した - ローファイ日記
  • 個人のリポジトリレベルの開発の話をしよう - ローファイ日記

    最近、個人のリポジトリレベルの開発でも、自分のためのIssueを立て、自分しか見ないPull Requestを作ったりしている。 docker-registry をインストールするぞ〜 · Issue #1 · udzura/docker-playroom · GitHub Install Ruby recipe by udzura · Pull Request #3 · udzura/docker-playroom · GitHub First version of ikachan module by udzura · Pull Request #1 · udzura/ikachan-node · GitHub この際気を付けていることとして: Issue、最初のdescriptionは最初のTODOへのポインタだけ書いておく プルリクエストは 生煮え の状態で出す 思ったこと、詰まった

    個人のリポジトリレベルの開発の話をしよう - ローファイ日記
  • 1