“.log”ファイル|アクセスログを管理する

find / -name "*.log"

ファイル検索でルート以下に存在する一般的なログファイルを検索してみる。

相当数のログファイルが存在していることに気づき、これらを定期的に確認する手段はないものか?

Nginxのアクセスログ
http://blog.zoncoen.net/blog/2013/11/11/logging-system-with-fluentd-elasticsearch-kibana3/
http://qiita.com/msykiino/items/b03eda79243ae8ee2029

Fluentd + ElasticSearch + Kibana
WEBブラウザから確認ができるグラフィカルな環境

(1)Fluentd
http://docs.fluentd.org/ja/articles/install-by-rpm
http://codezine.jp/article/detail/6958

sysctl -a|grep fin

# netstat -an

http://jehupc.exblog.jp/13571341/

現状ではアクセスが多いわけではなく、特に問題があるようには思えないので、NTPの設定のみを行いFluentdのインストールへ

# ulimit -n

vim /etc/security/limits.conf

limits.confに以下の内容を追記してマシンを再起動

reboot
数分後にログイン
ulimit -n

無事に変更された。
linux ulimitコマンド
コマンドに割り当てる資源を制限・管理する
ulimit -n |ファイルディスクリプタの最大数
ulimit -a |設定されている制限値を一覧表示
ulimit -m |メモリーの使用量(KB)
ulimit -t |CPU使用時間(秒)
ulimit -u |ユーザー一人が起動できるプロセス数
など

#作業が終了した時点で元に戻しておくことも考慮する

rmp(redhat package manager)を使用してインストール
http://docs.fluentd.org/ja/articles/install-by-rpm

CentOSはrpmリポジトリからのインストールがサポートされている
「ログ内に無効なタイムスタンプが入ることを防ぐためにノード上でntpdを設定することを強くお勧めします。」という言葉に引っかかる。

ntp(network time protocol)d(サーバー)を確認する
ntpq -p

先頭の「*」が現在同期されているタイムサーバー
先頭の「+」は予備、先頭の「-」は?プライベート?

date
現在の日時を表示させて確認
タイムサーバーと同期しており日時も正確であるので、継続することにする。(ノード上以外からのインストール?)

「/etc/yum.repos.d/td.repo」にrpmリポジトリを新規に登録することになるので、事前にその内容を確認しておく。

ディレクトリ「/etc/yum.repos.d」内には複数のrpmリポジトリファイルを確認、「td.repo」ファイルは存在してない。

curl -L http://toolbelt.treasuredata.com/sh/install-redhat.sh | sh

curl日本語のHow to use / Manual ex
http://www.hcn.zaq.ne.jp/___/index.html

curl --help

すでにcurlコマンドは使用可能な状態なのでコマンドを実行
curl -L http://toolbelt.treasuredata.com/sh/install-redhat.sh | sh

「td-agent」を確認してみる
ls /etc/yum.repos.d -fal
ディレクトリ内に「td.repo」ファイルが確認できたので継続
実行ファイル(スクリプト)は「/etc/init.d/td-agent」

実行する。
/etc/init.d/td-agent start

動作を確認する。(pidの番号は異なるもの)
/etc/init.d/td-agent status

設定ファイルの確認をする
find / -name td-agent.conf

「/etc/td-agent/td-agent.conf」を確認できた

curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test
find / -name td-agent.log

「td-agent.log」の内容を確認し成功を確認できた。

再度確認 サービス再起動
service td-agent restart

curlコマンドでtd-agentの初期ポート8888にテストログを送信する
curl -XPOST -d 'json={"json":"test-dayo-mess"}' http://localhost:8888/debug.test
cat /var/log/td-agent/td-agent.log

Fluentdの安定版td-aentの動作確認はできたので設定を変更していくだけ。
http://docs.fluentd.org/articles/free-alternative-to-splunk-by-fluentd
#上記のようなイメージ設定
Fluentd
http://docs.fluentd.org/ja/articles/quickstart

(2)ElasticSearch
http://www.elasticsearch.org/
キーワード:リアルタイム・全文検索

JAVAを使用することになるので、バージョンの確認
java -version

要件:バージョン6以上

yumでインストールを試みる
http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/setup-repositories.html#_yum

公開鍵の取込(?)ASCII化された公開鍵を取り込みます。
rpm --import http://packages.elasticsearch.org/GPG-KEY-elasticsearch
無反応・・・

リポジトリファイルを作成する
vim /etc/yum.repos.d/elasticsearch.repo

作成したファイルを確認する
cat /etc/yum.repos.d/elasticsearch.repo

インストールを開始する
yum install elasticsearch

サービスの開始
service elasticsearch start
起動項目に追加
/sbin/chkconfig --add elasticsearch

elasticsearchを確認してみる
find / -name elasticsearch*

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/setup-service.html#setup-service
MAX_OPEN_FILESがデフォルトで65535
「/var/log/」がログファイル
「/var/lib/」がデータ
「/etc/」が設定ファイル
「/tmp/」はワークディレクトリ
それぞれのファイルの中身を参照し正常に動作確認完了

(3)Kibana
http://www.elasticsearch.org/overview/kibana/

kibanaのダウンロード
wget --output-file=kibanadl.log https://download.elasticsearch.org/kibana/kibana/kibana-3.1.0.tar.gz
ファイルを解凍
tar zxvf kibana-3.1.0.tar.gz
ディレクトリ名を変更しておく

service --status-all

reboot

service elasticsearch start

パーミッションの確認作業
find / -name elasticsearch -ls

su
service elasticsearch start

service elasticsearch status

service td-agent start

service td-agent status

curl localhost:9200/_nodes/process?pretty

nginxのサーバーリストを変更し再起動
サービスを再度確認=トラブルなし
curl localhost:9200/_nodes/process?pretty

http://localhost:9200/での接続は復旧している。どうやらサービス自体が停止状態にあったことが原因。nginxのサーバーリスト設定はないのでポート番号指定でアクセスをしている。ポート番号を指定せずにサブドメインなどでのアクセスに移行するときに設定を行えば良い。

ブラウザでアクセスをすると、ERRORエラー表示
「Please ensure that Elasticsearch is reachable from your system.」

Elasticsearchの設定
http://www.elasticsearch.org/guide/
とても理解しやすい参考になるサイト
https://medium.com/hello-elasticsearch/elasticsearch-8c19db398430

状態の確認
curl 'localhost:9200/_cat/health?v&ts=0'

greenで正常・・・途方にくれる

curl localhost:9200/_nodes/process?pretty

困った。理由も分からず正常反応・・・。

curl -XGET 'http://localhost:9200/'

これも成功しているので・・・

curl -XPUT http://localhost:9200/shakespeare -d

ディレクトリを作成するように思えてパラメータはdata?バージョンの相違?

curl -XPUT 'http://localhost:9200/shakespeare' -create-dirs

find / -name shakespeare

ディレクトリを作成したので、ここにダウンロードできる?と、思ったけど、よくよく見てみたら大きな勘違いに気づく。「-d」のあとに「’」・・・インデックスの定義をここでやってしまうということ?のようなので、再度トライ。

curl -XPUT http://localhost:9200/shakespeare -d '
> {
> "mappings" : {
> "_default_" : {
> "properties" : {
> "speaker" : {"type": "string", "index" : "not_analyzed" },
> "play_name" : {"type": "string", "index" : "not_analyzed" },
> "line_id" : { "type" : "integer" },
> "speech_number" : { "type" : "integer" }
> }
> }
> }
> }
> ';

納得できました。curl -dのあとにデータ形式ということ。

rm -rf /var/lib/elasticsearch/elasticsearch/nodes/0/indices/shakespeare
ディレクトリごと削除「rm -rf」

service elasticsearch restart

再起動をして

curl -XGET 'http://localhost:9200/'

動作を確認、さきほどとnameが異なっている。

curl -XPUT http://localhost:9200/shakespeare -d '
> {
> "mappings" : {
> "_default_" : {
> "properties" : {
> "speaker" : {"type": "string", "index" : "not_analyzed" },
> "play_name" : {"type": "string", "index" : "not_analyzed" },
> "line_id" : { "type" : "integer" },
> "speech_number" : { "type" : "integer" }
> }
> }
> }
> }
> ';

find / -name shakespeare

気になるところはあったもののディレクトリが作成されたので、shakespeare.jsonへ

@インポートする・・・しばし考える。shakespeare.jsonをwgetしてそのファイルを指定すること「@shakesperare」なのか?

wget http://www.elasticsearch.org/guide/en/kibana/current/snippets/shakespeare.json

ダウンロードしたjsonファイルをkibanaのダッシュボードにコピーしてみる。「/var/www/kibana31/app/dashboards/shakespeare.json」

curl -XPUT localhost:9200/_bulk --data-binary @/var/www/(kibanaディレクトリ名)/app/dashboards/shakespeare.json
しばし沈黙の後・・・

ものすごい量のテキストが流れていった。

jsonファイルの存在
/var/www/kibana31/app/dashboards

find / -name fluent-plug*

gem install fluent-plugin-elasticsearc

gem install fluentd

オブジェクト指向スクリプト言語|Ruby
https://www.ruby-lang.org/ja/
https://www.ruby-lang.org/ja/libraries/

gem search --local

なにもインストールされていない?

gem search -r extconf

gem search -r mkmf

関連性のありそうなスクリプトはありそう

ruby -v

先にこれをやるべきでした。Rubyのバージョンが1.8.7なので(1.9以降にはRubyGemsが標準添付されている)自分でインストールしなければいけないようです。

gem -v

https://rubygems.org/pages/download/
現時点で最新は2.2.2

バージョンが古いだけで、gemの存在があるのでアップデートをしてみます。
gem update --system

gem -v

gem install fluentd

extconf.rb
http://guides.rubygems.org/gems-with-extensions/#extconfrb
all gems|RubyGems.org
https://rubygems.org/gems

yum info ruby*

yum install ruby-devel

gem install fluentd

試行錯誤後、Rubyに問題があることが明らかではあるものの不足分を追加していけばなんとかなるという発想から抜け切れず苦労しました。結果として以下サイトを参考に解決へ向け進行
http://centos.bungu-do.jp/archives/000294.html

Rubyのアンインストール
yum remove ruby
Ruby再構築のための準備、yumでインストール
yum -y install gcc zlib-devel openssl-devel sqlite sqlite-devel
ディレクトリを移動(/use/binでも良かったかも?)
cd /usr/local/src
公式のRubyサイトから最新版またはバージョン1.9以降を入手する
https://www.ruby-lang.org/ja/downloads/
「ソースコードからRubyをコンパイルする」からURLを参照
wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.2.tar.gz
ダウンロードされた圧縮ファイルを解凍
tar zxvf ruby-2.1.2.tar.gz
ディレクトリが新たに作成されるので移動してコンパイル開始
cd ruby-2.1.2
./configure
make
make install
Rubyのバージョンを確認
ruby -v
Rubyとgemのシンボリックリンクを作成する
ln -s /usr/local/bin/ruby /usr/bin/ruby
ln -s /usr/local/bin/gem /usr/bin/gem
(なので、作成しないようにするなら初期ディレクトリを/user/bin個人的にはlocal作成には意味があると思えるので満足)

これで再度チャレンジ
gem install fluentd
成功
gem install fluent-plugin-elasticsearch
不成功

プラグイン・・・FluentdとElasticsearch・・・td-agent(Fluentd)で収集したデータをElasticsearchに渡して、kibanaなどでデータ解析を行う。エラーログを見ていると開発ツールが必要になっているのは分かるものの、どういったものがプレインストールされている環境なのか?

とりあえず、java、Ruby、curlなどを調べつつ最新版にアップデートして、それぞれに開発者ツールを入れていくことに・・・。

yumで開発関連を調べ
yum info *dev*
yum info *devel*
関連性のありそうなものをインストール
yum install (発見したName)
Elasticsearchプラグインのgemインストール
gem install fluent-plugin-elasticsearch
を繰り返し、最終的に・・・

yum install libcurl-devel
gem install fluent-plugin-elasticsearch

td-agent.confの編集Elasticsearchにデータを送る

service td-agent restart

2つのwarnについては下記リンク

errorについて調査する。プラグインのインストールが成功したのでこのようなエラーは出ないと考えていたが、インストールする前と同様のエラー内容であることから。インストール以前のなにかに問題があるのでは?との考えに至る。

そしてこれを発見
cat /etc/td-agent/prelink.conf.d/td-agent.conf

ディレクトリ名からも初期の初期設定らしく、rubyのディレクトリ構造を指定しているようなので、rubyのインストールディレクトリを最新のものに変更してみる。

RPMとGem
http://docs.fluentd.org/ja/articles/config-file
td-agent
http://docs.treasuredata.com/articles/td-agent

なんとなく、この辺で理解が深まる。

データ収集を行うFluentdの安定版td-agentをインストールして、データ解析を行うelasticsearchまで収集したデータを渡し、elasticsearchのデータベースをkibanaでグラフィカルに表示させる。

インストールがうまくいかない場合は、それぞれの開発ツール(dev,devel,developer)を探して追加でインストールを行う。

td_agent=/usr/lib/fluent/ruby/bin/ruby

インストールパッケージを確認して掃除
RPMでのインストール一覧をソートして出力
rpm -qa | sort
(発見)elasticsearch-1.2.1-1.noarch
rpm -q ファイル名
rpm -qa | grep 検索文字

RPMでelasticsearchをインストールしたときのファイル一覧
rpm -ql elasticsearch
/etc/elasticsearch
/etc/elasticsearch/elasticsearch.yml
/etc/elasticsearch/logging.yml
/etc/rc.d/init.d
/etc/rc.d/init.d/elasticsearch
/etc/sysconfig
/etc/sysconfig/elasticsearch
/usr/lib/sysctl.d
/usr/lib/sysctl.d/elasticsearch.conf
/usr/lib/systemd/system
/usr/lib/systemd/system/elasticsearch.service
/usr/lib/tmpfiles.d
/usr/lib/tmpfiles.d/elasticsearch.conf
/usr/share/elasticsearch/LICENSE.txt
/usr/share/elasticsearch/NOTICE.txt
/usr/share/elasticsearch/README.textile
/usr/share/elasticsearch/bin
/usr/share/elasticsearch/bin/elasticsearch
/usr/share/elasticsearch/bin/elasticsearch.in.sh
/usr/share/elasticsearch/bin/plugin
/usr/share/elasticsearch/lib/elasticsearch-1.2.1.jar
/usr/share/elasticsearch/lib/jna-4.1.0.jar
/usr/share/elasticsearch/lib/jts-1.13.jar
/usr/share/elasticsearch/lib/log4j-1.2.17.jar
/usr/share/elasticsearch/lib/lucene-analyzers-common-4.8.1.jar
/usr/share/elasticsearch/lib/lucene-codecs-4.8.1.jar
/usr/share/elasticsearch/lib/lucene-core-4.8.1.jar
/usr/share/elasticsearch/lib/lucene-grouping-4.8.1.jar
/usr/share/elasticsearch/lib/lucene-highlighter-4.8.1.jar
/usr/share/elasticsearch/lib/lucene-join-4.8.1.jar
/usr/share/elasticsearch/lib/lucene-memory-4.8.1.jar
/usr/share/elasticsearch/lib/lucene-misc-4.8.1.jar
/usr/share/elasticsearch/lib/lucene-queries-4.8.1.jar
/usr/share/elasticsearch/lib/lucene-queryparser-4.8.1.jar
/usr/share/elasticsearch/lib/lucene-sandbox-4.8.1.jar
/usr/share/elasticsearch/lib/lucene-spatial-4.8.1.jar
/usr/share/elasticsearch/lib/lucene-suggest-4.8.1.jar
/usr/share/elasticsearch/lib/sigar
/usr/share/elasticsearch/lib/sigar/libsigar-amd64-linux.so
/usr/share/elasticsearch/lib/sigar/libsigar-ia64-linux.so
/usr/share/elasticsearch/lib/sigar/libsigar-x86-linux.so
/usr/share/elasticsearch/lib/sigar/sigar-1.6.4.jar
/usr/share/elasticsearch/lib/spatial4j-0.4.1.jar
/var/lib/elasticsearch
/var/log/elasticsearch
/var/run/elasticsearch

yumでインストールしたリスト
yum list installed

yum list ファイル名(ワイルドカード可)
Installed PackagesとAvailable Packagesが確認できる

yumでのアンインストール
yum remove ファイル名

gemでインストールしたリストと削除
gem list
gem uninstall ファイル名

rpmでのアンインストール
rpm -e パッケージ名
インストール済みのすべてのパッケージリスト
rpm -qa
rpm -qa | grep 検索文字列
パッケージの情報
rpm -qi パッケージ名

コメントを残す