ミッションクリティカル、事業者、セキュリティおよび変更管理、イベント間の関係を理解するために、そのインフラを包括的に理解を維持するために、組織を可能にするための包括的なログ管理および分析の戦略。オペレーティングシステムのWebサーバ、アプリケーション、およびログファイルからも、異なるフォーマットにもかかわらず、貴重なデータを提供し、ランダムに分布して提供。
なぜ、Apache Webサーバーそんなに人気がありますか?これは、グローバルウェブサイトの約40%のサポートを提供するために、自由でオープンソースです。独自のソフトウェアとオープンソースは、より人気が正比例しています。Apache Software Foundationの開発によって維持、セキュリティを提供し、小規模および大規模なサイトのための理想的な、あなたは簡単にすべての主要なオペレーティング・システム上で設定し、非常に強力かつ非常に柔軟であることができます。
この記事では、我々は最初の手順をご案内し、あなたに起動し、非常に単純なクラスタを構成するプロセスが表示されます。私たちは、その後、インストールと設定のlogstash、私たちのApacheのログにelasticsearchして送りました。その後、可視化し、Kibanaのダッシュボードでelasticsearchに運ばApacheのログを解析することができます。
私たちの目標
目的は、Apacheのログ弾性スタックは、ロギングおよび監視ソリューションを集中としてこのチュートリアルを使用することです。私たちは、別のノードLogstashで配置され、Apacheは、単一または複数のサーバからログを収集し、収集した事前構成されたログKibanaが視覚的に使用します。
私たちの弾性スタックセットは、3つの主要コンポーネントで構成されています。
- Elasticsearch:すべてのアプリケーションおよびモニター・ログを格納するために使用されます
- Logstash:サーバーコンポーネント、入ってくるログを処理するために使用され、供給弾性スタック
- Kibana:ログを検索し、可視化するためのWebインターフェイス
コンフィギュレーション
MacOSの、とUbuntu OS:上記の構成では、我々は2つのオペレーティングシステムを持っています。私たちは、上に示し、その上側の取付部弾性スタックです。あなたのインストールでは、異なるIPアドレスを持つことができます。インストールの外観を適切に変更を加える必要があります。
私たちは、データ収集のために以下の方法を使用します。
私たちは、中Logstashに直接データを渡します。Logstash我々は豊かな、データを分析するために使用し、その後にElasticsearchに渡されます。最後に、我々はデータを分析して表示するKibanaを使用しています。
インストール
Elasticsearch
I「ドキュメントにしたがってのLinux、MacOSの、およびWindows上でElasticsearchをインストールする方法について「インストールElasticsearch。しかし、私のElasticsearchが他の仮想マシンにアクセスできるようにすることができるようにするためには、設定/ elasticsearch.ymlのI Elasticsearch設定ファイルは、以下の構成を作りました:
cluster.name: elasticsearch
node.name: node1
network.host: _site_
cluster.initial_master_nodes: ["node1"]
上記では、我々はelasticsearchにcluster.nameの名前、およびノードの名前がnode1で与えます。_site_ network.hostが理解していないとして、上記のすべてが定義されている場合、あなたはを参照することができますドキュメント。それは9200のelasticsearchは、すべてのネットワークインターフェイスに結合することを意味します。上記elasticsearch.ymlファイルを変更した後、我々は、我々が見ることができ、Elasticsearchを再起動します。
上に示した9200ポートが正常にすべての現在のネットワークアドレスにバインドされています。我々は、次のコマンドを使用して、当社のWebインターフェイスを確認することができます。
ifconfig
我々は、次のコマンドでIPアドレスを確認することができます。
ifconfig eth0 | grep inet | awk '{ print $2 }'
上記のコマンドでは、我々は独自のネットワークによるインターフェース上記のeth0を交換する必要があります。
我々は対処することができ、当社のブラウザでは9200以上の入力ポートです。あなたが出力を見ることができるならば、それは我々が、インストールを修正する場合ことを意味します。
Kibana
私たちは、「記事によるとLinuxでは、MacOSの、およびWindows上で弾性スタックKibanaをインストールする方法」Kibanaをインストールします。我々は上記のインストールElasticsearchにアクセスできるようにするために、我々は中にデフォルトKibanaに適切な調整を行う必要があります。私たちは、設定/ kibana.ymlファイルを変更します。
server.host: "192.168.43.220"
elasticsearch.hosts: ["http://192.168.43.220:9200"]
ホストの名前で独自の環境に置き換え、また、あなたのElasticsearchのIPアドレスに基づいて適切な変更を加える必要がありますしてください。私たちは、完成変更するとき、私たちはKibanaを再起動します。私たちのブラウザでは、対応するIPアドレスを入力します:5601をインストールは正しい表示します:
あなたは上記の出力を見ることができるならば、それは私たちのKibanaのインストールが正しいことを意味しています。
アパッチ
今日のWebサーバの設計では、我々はNodejs + Apacheの組み合わせを使用します。あなたは、あなた自身のウェブを設計するために好きなように応じてお好みの言語を選択することができます。
我々はnodejsとApacheをインストールします。
sudo apt-get update
sudo apt-get install apache2 nodejs
次に、我々はプロセスを実行し、着信ローカルNode.jsのためのポート80上のプロキシURLのNode.jsアプリケーションを介してすべての要求を必要としています。この目的のために、我々はApacheサーバ/有効にインストールする必要があるのmod_proxyとmod_proxy_httpモジュール:
a2enmod proxy
a2enmod proxy_http
だから今エキサイティングな部分が開始されます。私たちは、Node.jsのアプリケーションのためのプロキシ要求にApacheサーバを設定する必要があります。その後、我々はのVirtualHostを設定するには、これを行います。私たちは、最初のディレクトリは/ etc / apache2の/サイト利用可能に行きます
$ pwd
/etc/apache2/sites-available
liuxg@liuxg:/etc/apache2/sites-available$ ls
000-default.conf default-ssl.conf
私が最初に私たち自身のconfファイルの一部を作成します。私の場合のために、私は次のように読みliuxg.confという名前のファイルを、作成しました:
liuxg.conf
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
ServerName www.liuxg.com
ServerAlias www.liuxg.com
ProxyRequests Off
ProxyPreserveHost On
ProxyVia Full
<Proxy *>
Require all granted
</Proxy>
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
上記では、我々は次の設定を構成し:
ProxyPass / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/
我々はVirtualHostの年に定義されている80のでご注意ください。上記構成により、我々は127.0.0.1:3000にマッピングされ127.0.0.1:80から要求することができます。私は、上記のように定義されたサーバー名www.liuxg.comを定義しました。私たちは、独自のドメイン名を持っていない場合、我々は、/ etc / hostsにレーンドメイン名を解決定義することができます。
liuxg@liuxg:/etc$ pwd
/etc
liuxg@liuxg:/etc$ cat hosts
127.0.0.1 localhost
127.0.1.1 liuxg
192.168.43.192 test.com
127.0.0.1 liuxg.com
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
次に、我々は、新しいサイトの設定を有効にし、デフォルトのサイトの設定を無効にする必要があります。
sudo a2ensite liuxg.conf
sudo a2dissite 000-default.conf
私たちの上の設定を変更した後、我々は、Apacheサービスを再起動する必要があります。
sudo service apache2 restart
Apacheが起動し、次のコマンドを実行している場合我々は確認することができます。
systemctl status apache2
$ systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Sun 2020-03-22 10:17:05 CST; 7s ago
Process: 5683 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 5687 (apache2)
Tasks: 55 (limit: 4915)
CGroup: /system.slice/apache2.service
├─5687 /usr/sbin/apache2 -k start
├─5688 /usr/sbin/apache2 -k start
└─5689 /usr/sbin/apache2 -k start
あなたは上記の状態がアクティブで表示された場合、それは、Apacheサービスが実行されていることを示しています。また、ブラウザのアドレスバーに入力することができlocalhost:80に Apacheが正常に動作してチェックします。
次に、我々はテストを行うためにnodejsプロジェクトを使用します。まず、以下の項目をダウンロードします。
git clone https://github.com/contentful/the-example-app.nodejs
上記およびその他のプロジェクトをダウンロードした後、我々はプロジェクトのルートディレクトリに進みます。
$ pwd
/home/liuxg/nodejs/the-example-app.nodejs
liuxg@liuxg:~/nodejs/the-example-app.nodejs$ ls
app.js cypress.json helpers.js LICENSE package.json README.md test
app.json Dockerfile i18n node_modules package-lock.json routes variables.env
bin handlers lib npm-debug.log public services views
次のコマンドを入力します。
npm install
等の設置、後にして、実行するには、次のコマンドを入力します。
npm run start:dev
ブラウザでの私たちのUbuntuのOSだから、我々は、Webサーバーが稼働しているかどうかを検出することができます:
上に示した3000個のアドレスが正常に動作していました。私たちは、80個のアドレスを確認してください。
上記では、我々はデフォルトアドレスの場合にはそのローカルホストの使用が80で見ることができ、それは我々が成功しapachecスポーツの成功を収めていることを示しています。あなたが/ etc / hostsにすでにある場合は、ドメイン名はその後、セットされています:
私たちは、次のアドレスで、Apacheのログファイルを見つけることができます。
$ pwd
/var/log/apache2
liuxg@liuxg:/var/log/apache2$ ls
access.log access.log.1 error.log error.log.1 other_vhosts_access.log
私たちが見ることができる上のaccess.log、error.logファイルや他の文書で。次のようにのaccess.logを読み取ります。
インストールLogstash
私たちは、UbuntuのOS上でLogstashをインストールしました。
Logstashは、将来の使用のための解析や店舗のログを収集することができ、かつ迅速に分析を記録することができ、オープンソースのツールです。Logstashには複数のソース(クラスタ内の例えばドッカーインスタンス)からログを重合するために使用され、構造化JSON形式などからテキスト行を解析しています。弾性スタック、Logstash Elasticsearchでストアとインデックスログへ。
Logstash必要性は、Java 8またはJava 11をインストールします。
sudo apt-get install default-jre
あなたは、Javaがインストールされていることを確認します。
java -version
類似した上で次のコマンドの出力した場合は、正しい方向に向かっていることを知っているだろう。
openjdk version "11.0.6" 2020-01-14
OpenJDK Runtime Environment (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1)
OpenJDK 64-Bit Server VM (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1, mixed mode, sharing)
Logstashをインストールするには、次のコマンドを使用します。
curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-7.6.1.deb
sudo dpkg -i logstash-7.6.1.deb
上記は、我々は我々のElasticsearchは、7.6.1バージョンと一致してインストールしています。あなたは、ダウンロードへのバージョンに応じて上記のバージョンを変更することができます。
ここまでは、インストールを完了しました。
設定Logstash
/etc/logstash/conf.dに位置LogstashプロファイルJSON形式。入力フィルタと出力:コンフィギュレーションは、3つの部分から構成されています。
のは02-のapache-input.confという名前の設定ファイルを作成してみましょう、私たちのapacheの入力を設定します。
sudo vi /etc/logstash/conf.d/02-apache-input.conf
以下の入力を挿入します。
input {
file {
path => ["/var/log/apache2/access.log"]
start_position => "beginning"
sincedb_path => "/dev/null"
type => "apache_access"
}
file {
path => ["/var/log/apache2/error.log"]
start_position => "beginning"
sincedb_path => "/dev/null"
type => "apache_error"
}
}
注:Apacheのログファイルのパスは、ご使用の環境や基礎となるオペレーティング・システムによって異なる場合があります。
保存して終了。これは、入力ApacheはTCPポート5044でリッスンします指定します。今、我々は、フィルタApacheのメッセージが追加されますする10のapache-filter.confという名前の設定ファイルを作成する必要があります。
sudo vi /etc/logstash/conf.d/10-apache-filter.conf
Apacheは、次のフィルタ構成を挿入します。
filter {
if [type] in [ "apache" , "apache_access" , "apache-access" ] {
grok {
match => [
"message" , "%{COMBINEDAPACHELOG}+%{GREEDYDATA:extra_fields}",
"message" , "%{COMMONAPACHELOG}+%{GREEDYDATA:extra_fields}"
]
overwrite => [ "message" ]
}
mutate {
convert => ["response", "integer"]
convert => ["bytes", "integer"]
convert => ["responsetime", "float"]
}
geoip {
source => "clientip"
target => "geoip"
add_tag => [ "apache-geoip" ]
}
date {
match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
remove_field => [ "timestamp" ]
}
useragent {
source => "agent"
}
}
if [type] in ["apache_error","apache-error"] {
grok {
match => ["message", "\[%{WORD:dayname} %{WORD:month} %{DATA:day} %{DATA:hour}:%{DATA:minute}:%{DATA:second} %{YEAR:year}\] \[%{NOTSPACE:loglevel}\] (?:\[client %{IPORHOST:clientip}\] ){0,1}%{GREEDYDATA:message}"]
overwrite => [ "message" ]
}
mutate
{
add_field =>
{
"time_stamp" => "%{day}/%{month}/%{year}:%{hour}:%{minute}:%{second}"
}
}
date {
match => ["time_stamp", "dd/MMM/YYYY:HH:mm:ss"]
remove_field => [ "time_stamp","day","dayname","month","hour","minute","second","year"]
}
}
}
保存して終了。ログの「アパッチ」タイプのラベルされたフィルタルックスは、それが構造化およびクエリできるように、着信Apacheのログを解析する利用GROKにしようとします。
最後に、我々は30-elasticsearch-output.confの名前の設定ファイルを作成します。
sudo vi /etc/logstash/conf.d/30-elasticsearch-output.conf
次の構成のインサート出力:
output {
elasticsearch {
hosts => ["http://192.168.43.220:9200"]
user => "YourUserName"
password => "YourPassword"
index => "apache-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
}
あなたElasticseearchセキュリティを設定されている場合は、上記の独自のユーザー名とパスワードを記入してください。そうしないと、あなたがコントロールすることはできません。
保存して終了。この出力はElasticsearch http://192.168.43.220:9200実行中に記憶されている実質的Logstashログデータに設定されています。そのインデックス名はapache_logsです。
私たちは、資本が終了したら、私たちは私たちの成功の設定を確認するには、次のコマンドを使用することができます。
/usr/share/logstash/bin/logstash --configtest -f /etc/logstash/conf.d/
我々はまた、「私の他の記事に従うことができる弾性スタックLogstashをインストールする方法 Logstashをインストールするには」を。インストールはlogstashインストールパッケージを抽出することにより行われ、全ての入力、フィルタ、および長いコンフィギュレーション・ファイルと同じ出力、などlogstash.confされています。
logstash.conf
input {
file {
path => ["/var/log/apache2/access.log"]
start_position => "beginning"
sincedb_path => "/dev/null"
type => "apache_access"
}
file {
path => ["/var/log/apache2/error.log"]
start_position => "beginning"
sincedb_path => "/dev/null"
type => "apache_error"
}
}
filter {
if [type] in [ "apache" , "apache_access" , "apache-access" ] {
grok {
match => [
"message" , "%{COMBINEDAPACHELOG}+%{GREEDYDATA:extra_fields}",
"message" , "%{COMMONAPACHELOG}+%{GREEDYDATA:extra_fields}"
]
overwrite => [ "message" ]
}
mutate {
convert => ["response", "integer"]
convert => ["bytes", "integer"]
convert => ["responsetime", "float"]
}
geoip {
source => "clientip"
target => "geoip"
add_tag => [ "apache-geoip" ]
}
date {
match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
remove_field => [ "timestamp" ]
}
useragent {
source => "agent"
}
}
if [type] in ["apache_error","apache-error"] {
grok {
match => ["message", "\[%{WORD:dayname} %{WORD:month} %{DATA:day} %{DATA:hour}:%{DATA:minute}:%{DATA:second} %{YEAR:year}\] \[%{NOTSPACE:loglevel}\] (?:\[client %{IPORHOST:clientip}\] ){0,1}%{GREEDYDATA:message}"]
overwrite => [ "message" ]
}
mutate
{
add_field =>
{
"time_stamp" => "%{day}/%{month}/%{year}:%{hour}:%{minute}:%{second}"
}
}
date {
match => ["time_stamp", "dd/MMM/YYYY:HH:mm:ss"]
remove_field => [ "time_stamp","day","dayname","month","hour","minute","second","year"]
}
}
}
output {
elasticsearch {
hosts => ["http://192.168.43.220:9200"]
user => "YourUserName"
password => "YourPassword"
index => "apache-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
}
スタートLogstash
私たちは、直接実行するために、上記のlogstash.confを使用することができます。
sudo /usr/share/logstash/bin/logstash -f logstash.conf
私たちは、どこlogstash.conf年のディレクトリに上記のコマンドを実行します。ターミナルでは、我々は次の出力を見ることができます:
オープンKibana、次のコマンドを入力します。
GET _cat/indices
私たちは、apacheのイベントの数を見ることができます:
当社nodejs Webサーバーでは、いくつかのリンクをクリックして、イベントの数を見てみましょう。
私たちは、事件の数が増加していることがわかりました。我々はまた出会うKibanaのことでapacheのイベントを見つけることができます。
さて、今日の記事では、最初にここに書いてます。私はあなたの助けを願っています。
参考:
【2】https://www.cloudbooklet.com/setup-node-js-with-apache-proxy-on-ubuntu-18-04-for-production/