全然理想形では無いのだが、fluentd公式Dockerイメージを起動してみたらAlpine Linuxで、fluentdプラグイン入れるのにもはぁはぁしてしまったりして、やっぱり地道にできるところからやってみたのであった
まずは土台
##EC2でAmazon Linux 2を1台立てる
割愛
ちなみに今回使用したAMI
# cat /etc/image-id
image_name="amzn2-ami-hvm"
image_version="2"
image_arch="x86_64"
image_file="INCOMPLETE-amzn2-ami-hvm-2.0.20191024.3-x86_64.xfs.gpt"
image_stamp="0c64-ace2"
image_date="20191030215819"
recipe_name="amzn2 ami"
recipe_id="2428dc59-f379-186b-2da3-7300-200a-9c34-a139571b"
土台のAmazon Linux 2の初期設定(おもに日本語と日本時間の設定)
# sudo su
# #最初から入ってるアプリケーションを念のためアップデート
# yum update -y
# #今のタイムゾーン設定ファイルlocaltimeを念のためバックアップ
# cp /etc/localtime /etc/localtime.org
# #タイムゾーン設定ファイルlocaltimeをJapanファイルへのリンクに置き換えちゃう
# ln -sf /usr/share/zoneinfo/Japan /etc/localtime
# #システム時刻設定ファイルを念のためバックアップ
# mv /etc/sysconfig/clock /etc/sysconfig/clock.bk
# #システム時刻設定ファイルを日本用に書き換えちゃう
# echo -e 'ZONE='Asia/Tokyo'\nUTC=true' > /etc/sysconfig/clock
# #今の地域設定ファイルを念のためバックアップ
# mv /etc/sysconfig/i18n /etc/sysconfig/i18n.bk
# #地域設定ファイルを日本用に書き換えちゃう
# echo 'LANG=ja_JP.UTF-8' > /etc/sysconfig/i18n
Docker
Docker自体のインストールと設定
# #dockerをインストール
# #(yumには無かった)
# amazon-linux-extras install -y docker
# #dockerを早速起動
# service docker start
# #dockerの起動状態を確認
# service docker status
# #今後はOSを起動したら自動でdockerも起動するよう設定
# chkconfig docker on
# #dockerのバージョンを念のため確認(18.09.X以降ならOK)
# docker --version
Docker version 18.09.9-ce, build 039a7df
さっそくDockerイメージをゲットしてぶちこんで行くぞー!
# #dockerイメージ:AmazonLinux最新版をダウンロード
# docker pull amazonlinux:latest
# #作業ディレクトリを作成
# #(名前は何でもいいけど、一応、後で作るdockerイメージの名前と合わせておく)
# mkdir custom-td-agent
# #そのディレクトリに移動
# cd custom-td-agent
イメージからコンテナを起動して好みの●●に仕立てていくぜ
# #さっきDLしたdockerイメージ amazonlinux:latest を使ってdockerコンテナを起動するゾ
# #ちなみに、すぐdockerの中に入って設定作業のためのコマンドを色々打ちたいので、
# #今回コンテナ君に実行させるプログラムは bash だ
# #(なお、/bin/bash などの対話コマンドを実行する際は -it オプションをつけないといけない)
# docker run -it --name custom-td-agent amazonlinux:latest /bin/bash
# # ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ここからDockerコンテナ内のbash ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
# #dockerイメージ amazonlinux:latest に入っていないコマンドをインストール
# yum install -y which sudo vim
# #dockerコンテナの中では↓をやらないと全角日本語入力が文字化けする
# export LANG=C.UTF-8
# export LANGUAGE=en_US:
# #ここからしばらく、EC2のAmazonLinuxと同様に初期設定
# #(もしかしたらsudoいらんかもしれんがまぁいい)
# sudo yum update -y
# sudo cp /etc/localtime /etc/localtime.org
# sudo ln -sf /usr/share/zoneinfo/Japan /etc/localtime
# sudo mv /etc/sysconfig/i18n /etc/sysconfig/i18n.bk
# sudo echo 'LANG=ja_JP.UTF-8' > /etc/sysconfig/i18n
# sudo mv /etc/sysconfig/clock /etc/sysconfig/clock.bk
# sudo echo -e 'ZONE='Asia/Tokyo'\nUTC=true' > /etc/sysconfig/clock
# #td-agentやtwitterプラグインなどに必要なライブラリをインストール
# #(今回はtd-agentでツイートを抽出してElastic Searchにぶち込んだりしてるので色々入れている)
# sudo yum install -y git openssl openssl-devel libcurl libcurl-devel gcc-c++
# #td-agentをyumでインストールできるよう、リポジトリの設定をしておく
# sudo echo -e '[treasuredata]\nname=TreasureData\nbaseurl=http://packages.treasuredata.com/3/redhat/7/$basearch\ngpgcheck=1\ngpgkey=https://packages.treasuredata.com/GPG-KEY-td-agent' > /etc/yum.repos.d/td.repo
# #満を持して td-agent をインストール
# sudo yum install -y td-agent
# #td-agent君のために、limits.conf を編集してファイル同時操作数のリミットを解除しておく
# vim /etc/security/limits.conf
+++++++++ ↓を limits.conf の末尾に追記 +++++++++
root soft nofile 65536
root hard nofile 65536
* soft nofile 65536
* hard nofile 65536
+++++++++++++++++++++++++++++++++++++++++++++++
# #編集終わったらvimを抜ける
# #ここで一回コンテナを終了するゾ
# #(コンテナ君には bash を実行させてるわけなので、exitすなわちコンテナ終了)
# exit
# # ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ ここまでDockerコンテナ内のbash ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
##まだまだ行くぞー!
Dockerを抜けた所さんで、もとのEC2 Amazon Linux 2上で作業続行だ
# #さっき終了したコンテナのIDを調べる
# docker container ls
CONTAINER ID IMAGE COMMAND CREATED
XXXXXXXXXXXX yyyyyyyyyyyy "/bin/bash" 5 hours ago
# #ここで一回、コンテナからイメージを作成しておく
# #イメージの名前は amazonlinux:custom-td-agent とでもしておこう
# docker container commit XXXXXXXXXXXX amazonlinux:custom-td-agent
# #保存されてるイメージの一覧を確認
# docker image ls
# #さっそくそのイメージを使ってコンテナを起動
# #-d --tmpfs /tmp --tmpfs /run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --stop-signal SIGRTMIN+3
# #↑は、dockerの中のsystemctlコマンド(ひいてはserviceコマンド)を実行するのに必要な権限などを付与するおまじない
# #これやらないと、dockerの中でserviceコマンドを使ってtd-agentを起動できない
# #(ちなみに↑のように細々した指定をせず -d --privileged だけでもイケるが、過剰な特権を与えてしまうので良くないとのことだ)
# #なお /sbin/init は実質 systemd(Linux起動処理)だゾ
# docker container run -d --tmpfs /tmp --tmpfs /run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --stop-signal SIGRTMIN+3 yyyyyyyyyyyy /sbin/init
##ふたたびコンテナの中へ…
# # ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ここからDockerコンテナ内のbash ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
# #td-agentの設定作業の続きをやるゾ
# #↓必要なfluentdプラグインのインストール
# #(プラグイン自体の説明は割愛)
# /usr/sbin/td-agent-gem install eventmachine
# /usr/sbin/td-agent-gem install fluent-plugin-twitter
# /usr/sbin/td-agent-gem install fluent-plugin-record-reformer
# /usr/sbin/td-agent-gem install fluent-plugin-elasticsearch
# #td-agentの設定ファイルを編集
# vim /etc/td-agent/td-agent.conf
td-agent.conf
#!/bin/bash
<source>
@type twitter
consumer_key *************************
consumer_secret *************************************************
access_token *****************-********************************
access_token_secret ***********************************************
tag source.tweet
timeline tracking
keyword 'hogehoge,ほげほげ,今日のわんこ,天空のつるぎ'
output_format flat
</source>
<match source.*>
@type copy
<store>
@type rewrite_tag_filter
#capitalize_regex_backreference yes
remove_tag_prefix source
<rule>
key text
pattern ^RT\s.*$
tag trush
</rule>
<rule>
key user_screen_name
pattern ^.+[bB][oO][tT]$
tag trush
</rule>
<rule>
key user_name
pattern ^.+[bB][oO][tT]$
tag trush
</rule>
<rule>
key text
pattern ^.*$
tag ${tag}
</rule>
</store>
</match>
<filter tweet>
@type record_transformer
enable_ruby true
<record>
text_reformed ${record["text"].gsub(/http:[^\s]+/, '').gsub(/https:[^\s]+/, '').gsub(/@[^\s]+/, '').gsub(/\#[^\s]+/, '')}
tag ${tag}
</record>
</filter>
<match trush>
@type null
</match>
<match tweet>
@type copy
<store>
@type elasticsearch
host 10.0.0.111
port 9200 #セキュリティグループで通信許可を忘れずに
index_name my-twitter
type_name tracking
include_tag_key true
tag_key tagname
time_key created_at
include_timestamp true
<instance_profile_credentials>
</instance_profile_credentials>
</store>
</match>
# #編集終わったらvim抜ける
# #いよいよtd-agent起動
# service td-agent start
# #コンテナ内のAmazonLinux起動時にtd-agentを自動起動するよう設定
# chkconfig td-agent on
# #td-agentにエラーがないか確認
# tail -f /var/log/td-agent/td-agent.log
# #Ctrl-P を押して、続けて Ctrl-Q を押そう
# #コンテナを止めずに抜けることができる
# #(exitしたらコンテナも止まっちゃうゾ)
# # ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ ここまでDockerコンテナ内のbash ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
##仕上げ
# #コンテナ死んでないか一応確認
# docker container ls
# #ひとまず完成ってことで、イメージを作成しておく
# docker container commit XXXXXXXXXXXX amazonlinux:custom-td-agent
# #作成されたイメージを確認
# docker image ls
# #ぬわああああん疲れたもおおおおん!