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

console.logをlogger.infoに置き換えてくれるeslint-pluginを書いた

Node.jsのアプリケーションのログをJSONログに変えたいが、全部自分で置き換えるのは面倒なので console.logからロガーを使ったコードに書き換えてくれるeslint-pluginを書きました。www.npmjs.com 以下のようなコードを自動で置き換えます。 // エラーとし…

DatadogのAutoDiscovery機能を使ってPrometheusのエンドポイントを叩いてメトリクスをDatadogに送る

DatadogのAutoDiscovery機能があるのを知ったので試してみたよ、という記事です。 今回は簡単に設定を試すために docker-composeを使って試してみました。 2022/09/29追記: 本記事の内容は少し古くなっています。 本記事では、Prometheusのインテグレーショ…

コネクションのIDを割り振ってMDCにputする

本番でのご使用はご注意ください。 あとJDBCドライバ固定のコードになっているので注意してください。 タイトル通りなんですがコネクションのIDを割り振ってMDCにputするコードを書いたので ここに書いておきます。 なぜこんな物を書いたかというと コネクシ…

MyBatis経由で実行するSQLにリクエストID入れてみる。ダーティハックだけど。

MyBatis経由で実行される全てのSQLに対して SQLコメントを追加したい気持ちになったので 簡単にどうやるのかを書いておく。 stackoverflowにも質問を書いたけど ググってたら思いついてしまった。(ほぼコピペだけど) ちなみにリフレクションでこじ開けるの…

AWS X-Rayを有効にしてLambdaで実行した場合に `X-Amzn-Trace-Id` はどこからやってくるのか

調べたのでメモしておく。 結論: 環境変数から取ってきている。 node での使用例を見ると 以下のような形で利用できる模様 // これでAWSの呼び出しがX-Rayに記録される var AWS = AWSXRay.captureAWS(require('aws-sdk')); これをソースコードから追ってみる…

JavaユーザならCode FormatterにはSpotlessがオススメ

CIでフォーマッタ掛けてフォーマットのチェックしてますか? プロジェクトでフォーマットがある程度統一されていると落ち着きませんか? コードフォーマッタで悩んでいる、という人にオススメのツールとして Spotless というツールを紹介します。 記事の構成…

関数呼び出しの実引数にリテラルをコメント無しで使った場合に警告するLinterを書いてみた #go

以下のリンク先にuberのgoのコーディングスタイルのガイドがあるのですが そこにあるルールに基づいたエラーを吐くLinterを書いてみました。 github.com よく見ると元のルールとは微妙に違うような気がします。 "foo"という文字列を渡してるけど、Goodではそ…

そーだい本、「失敗から学ぶRDBの正しい歩き方」を読みました

「そーだい本」こと、曽根壮大さんが書かれた「失敗から学ぶRDBの正しい歩き方」を読みました。 読み終えたので感想を書いてみます。 gihyo.jp 感想 感想を書く前に、まずは書籍紹介を引用してみます。 「データベースがよく落ちる」「前任者が残したテーブ…

無職になりました

9月末で無職になりました。 正社員として地方からフルリモートで働ける・雇っていただける会社を探しています。 直近のお仕事では、Java/Spring Bootを使ったAWS ECS上で動くアプリケーションの開発や TerraformやAnsibleを使った運用に関わってきました。ま…

運用とログ

アラート起因で調べるベースの運用とログの話を書いておく。 状況確認 状況確認は大事。ひとまず初動で原因が分かると嬉しいので ざっくり状況確認。 ログを読む エラーログを読む なにも出てなかったらWARNを読む メトリクスを見る 5xxエラーを見る どのサ…

Amazon Linux 2にBCCを入れて、Pythonのメソッド実行のトレースをしてみる

今回はBCC(BPF Compiler Collection)のツールを使って Pythonのメソッド実行のトレースをやってみます。 今回の記事の流れは以下のとおりです。 Amazon Linux 2を立ててBCCのインストールをする 検証のためのコードを準備する 実際にメソッドの呼び出しを…

AWS CDKを使ってAWS LambdaにAPI Gateway経由で呼び出す口を用意する

Lambdaを使ってAPIをホストしたい時、何使いますか? AWS CDK、おすすめです。 実際のコード Lambda Functionを中心として、Lambda Functionに関連付けを紐付けるだけで API Gatewayなりのリソースが作成される。 #!/usr/bin/env node import 'source-map-su…

Goの型付きnilで死んだ話

これはどういう結果になるか、分かりますか? package main import ( "fmt" "bytes" ) func Buffer() *bytes.Buffer { return nil } func main() { b := Buffer() fmt.Printf("%T %v", b, b) } こうなります。 型無しnilになって欲しい気持ちだった。 結局、…

DNSの送受信をtcpdumpで見る

apt update && apt install -y tcpdump dnsutils tcpdump -X -n -vv dst port 53 or src port 53 & # dig すればなんか出るはず dig yahoo.co.jp tcpdumpで真面目に見たのは初めてなので ↓を見ながら調べた。 tcpdumpチートシート - Qoosky 28バイトはヘッダ…

2019/07/26 KCL v2周りの話

KCLv2の話 移行はこの辺読んで。Kinesis Client Library 1.x から 2.x への移行 - Amazon Kinesis Data Streams localstackではKinesis Client Library v2はテスト出来ない 内部で使っているkinesaliteでは、新しいAPIがサポートされていない Kinesis Client…

Armeriaで始めるDNSのSRV Recordを使った クライアントサイドロードバランシング

今回は、Armeriaを使って、DNSのSRV Recordを使ったクライアントサイドロードバランシングをやってみました。 ソースコードはこのリポジトリにおいています。 クライアントサイドロードバランシングの必要性については以下の記事を読むと良いかもしれません…

JUnit 5 でどこが変わったのか

JUnit5 でどこが変わったのか、今いるチームの開発メンバや、JUnit5ざっくり知りたい人向けに書いておきます。 この記事では以下の内容について書いていきます。 なぜ移行するか どこが変わったか まとめ なぜ移行するのか なぜ移行するかを簡単に説明してお…

内部で使っているライブラリを JUnit 5 (jupiter) に 移行した

この記事では、JUnit5への移行を行うと共に どういう書き換えをしたかを書いておきます。 以下の内容で書いていきます。 今回移行したプロジェクトの前提 どういう方法で移行するか PMDのアップデート junit 4系の依存を完全に外す junit-jupiterの依存とテ…

Checkstyle 8.13からClassFanOutComplexityでカウントされる対象が増えて死んだ話

以下のリリースノートにこんな記述がありました。 checkstyle.org ClassFanOutComplexity: count complexity base annotations/extends/implements/methods params. Author: kazachka #4092 annotation, extends, implementsで使われているクラスもClassFanO…

ThreadPoolExecutorを拡張してスレッドプールを使いつつもMDCを引き回すようなExecutorを作ってみる

今、Java並行処理プログラミング読んでいて ThreadPoolExecutorというかAbstractExecutorServiceのnewTaskForというメソッドを知ったので 使ってみます。 今回の記事では、ThreadPoolExecutorを拡張して MDC、Mapped Diagnostic Contextを引き渡しながら、タ…

Gatlingを使った負荷試験を継続的に回すためのビルドやセットアップ周りの話

負荷試験は大事なのは皆さんご存知だと思いますが すぐにセットアップ出来る負荷試験ツールもあると良いですね。 この記事では、自分がやっている負荷試験の方法を紹介しておきます。 負荷試験にはGatlingを使っています。 この記事は以下の流れで説明してい…

GradleのプロジェクトでIntellij IDEAで使われるコンパイラの引数をbuild.gradleに設定したい

その要求に答えてくれるのがこの JetBrainsが出している、gradle-idea-ext-pluginです。 idea { project { settings { compiler { javac { javacAdditionalOptions "-Amapstruct.defaultComponentModel=spring -Amapstruct.unmappedTargetPolicy=ERROR" } } …

Spring Boot 2.1からFlyway 3.x, 4.x系で起動できない。Flywayのアップデートをしてください。

起動できません。Flyway 5.1以降にアップデートしましょう。理由としては、spring boot 2.1.x系から以下のflywayのissueによって導入されたクラスに spring-boot-autoconfigureが依存するようになったからです。 Introduce fluent configuration · Issue #19…

Spring WebFluxでSpring Security OAuth2で作った認証サーバを使って認証するライブラリを書いた

Spring Security 5.2.0に、OAuth 2.0 Token Introspectionで認証が可能なモジュールが実装されています。 Provide support for OAuth 2.0 Token Introspection · Issue #5200 · spring-projects/spring-security · GitHub また、このReactive版も提供されて…

Concurrency-LimitsとOkHttpのIntegrationを書いてみた

Netflix/concurrency-limits とOkHttp3のIntegrationを書いた。 このライブラリの強みはNetflixの人が書いた、mediumの記事やリポジトリのREADMEを読んでほしい。 GrpcのClientのInterceptor周りを参考に書いた。 以下コード。 public class OkHttpClientLim…

Release Itの魅力を伝える

この記事では「Release It」という本を紹介する。 エンジニアリングに携わり、ソフトウェアの開発・運用をしている人に この「Release It」の魅力を伝えたい。 1年以上かけて作ったソフトウェアのリリースの日がやってきたあなたは、全機能が完成し、単体テ…