記事のディレクトリ
運用・保守担当者として、その値は、多数のサービスの展開ではありませんが、トラブルシューティングとパフォーマンスの最適化サービスでは、最適化は、サービスとその設定パラメータの理解をテストし、完全にログファイルを主に私たちをトラブルシューティングするために主です初期の我々は一般的ではないけれども、sed、awk、grepの三銃士中小企業は、効果の多くを持って使用します。しかし、大企業のクラスタアーキテクチャでは、三銃士は、ログ収集と治療が非常に困難と不便です、少し疲れていました。ELKは、分散ログプラットフォームがされて入ってきたので!
私たちは、それが完全に実現可能である、銃士は百万のレベルのPVのログ分析をシミュレートしようとし使用することができます!以下のために非常に困難であったPV数百万人に掻き集めます!
A、ELKプロフィール
1、ELKを知っています
ELKはスタンドアロンのソフトウェアサービスではなく、一括して3つのソフトウェア、彼らはElasticserach、Logstash、Kibanaです。ELKは主に多数のサーバーのさまざまなログ集中管理のために使用され、ログを分析することができます。
- Elasticsearchは、JAVA言語の開発、分散ストレージ、検索、主に中央集中型のログ管理、ログ分析と統計的コンテンツ、リアルタイム、高速な表示結果を得るため、Luceneの使用の基礎となる検索メカニズム、ESを単独で使用することができます基づいていますまたLogstash、Kibana組み合わせることができます。
- Kibana Node.jsのフレームワークはElasticsearch、Logstashは、ログデータのESクラスタを読み取ることができている、ユーザーが簡単にログのシンプルかつ高速な処理を実現し、Webインタフェースを介して見ることができ、主にウェブUIインターフェースを提供するために、言語発達に基づいています。
- Logstashは、JAVA言語の開発に基づいており、これは主に、ログデータ収集クライアントのために使用されます。システムログ、コアログ、アプリケーションログ、セキュリティログ、監査ログ、あなたはまた、ログの内容をフィルタリングし、最終的にはESクラスタにログを送信することができます。
注:
elasticsearchは、2つのポートを開いて、その役割は、以下のとおりです。
- 9200は
ポートESノードと外部通信を使用することです。これは、RESTfulなインターフェースのhttpプロトコルであります - 9300は
ESのノード間の通信に使用されるポートです。これは、TCPポート、クラスターとれるtcpClientとの間の通信がそれを取っているです。(ポートJavaプログラムを設定するには、設定ファイルに、ESを使用した場合)
2、ELKチャート
Redisのワークフローキューを追加した後:
Logstash包含Index和Agent(shipper) ,Agent负责客户端监控和过滤日志,而Index负责收集日志并将日志交给ElasticSearch,ElasticSearch将日志存储本地,建立索引、提供搜索,kibana可以从ES集群中获取想要的日志信息。
3、ELFKアーキテクチャ
その後、それはソフトウェアを出てきました!
Filebeat:軽量ログ収集を行って書かれた言語に基づいており、Filebeatが収集Logstashを使用して、6つの家族のいずれかに属し、早期ELKアーキテクチャを打つ、ログおよびフィルタにログを解析しますが、Logstash CPUに、メモリ、IOおよび他のリソース消費はLogstash、Filebeat CPUおよびメモリ共有システムに比べて、比較的高い、ほぼ無視できる;それは最初のログELFKプラットフォームの背後にあります。
ELFKチャート
ELFKワークフロー:
使用FileBeat获取Linux服务器上的日志。当启动Filebeat时,它将启动一个或多个Prospectors (检测者),查找服务器上指定的日志文件,作为日志的源头等待输出到Logstash。
Logstash从FileBeat获取日志文件。Filebeat作为Logstash的输入input将获取到的日志进行处理,Logstash将处理好的日志文件输出到Elasticsearch进行处理。
Elasticsearch得到Logstash的数据之后进行相应的搜索存储操作。将写入的数据可以被检索和聚合等以便于搜索操作,最后Kibana通过Elasticsearch提供的API将日志信息可视化的操作。
二、ビルドログにELK疑似分散プラットフォーム
:私は2つのCentOSにドッキングウィンドウコンテナ演奏
docker1を:172.17.0.2 elasticsearch + kibana
docker2:172.17.0.3 Logstashの
注意:コンテナは-privileged 2つの超大国に開放しなければなりません!
ビルドプロセス
1、ソフトウェアは、それぞれのコンテナをダウンロードする必要が
docker1
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.0.tar.gz
wget https://artifacts.elastic.co/downloads/kibana/kibana-5.3.0-linux-x86_64.tar.gz
#安装jdk1.8.0
wget wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
docker2
wget https://artifacts.elastic.co/downloads/logstash/logstash-5.3.0.tar.gz
scp 172.17.0.2:/jdk-8u141-linux-x64.tar.gz /usr/local/
インストールのポイント:
- 任意のは、JDKをインストールする必要が使用するためには、JAVA言語のソフトウェアで書かれました。インストールを参照してください:
https://blog.csdn.net/weixin_44571270/article/details/102939666
- ELK一貫性の高度を維持するためのソフトウェアの必要性の三つのバージョン!私はフルバージョンが5.3.0でインストールしたいと思います。また、JDKのバージョンが1.8.0よりも低くありません。
2、インストールElasticsearch
#把ELK三个软件都移到各自容器的/usr/local/下
cd /usr/local
tar xvf elasticsearch-5.3.0.tar.gz
mv elasticsearch-5.3.0 elasticsearch
cd elasticsearch
vim /usr/local/elasticsearch/config/elasticsearch.yml #修改下面的参数
#启动elasticsearch,这个服务不能用root用户启动,只能使用普通用户启动它
useradd elasticsearch
chown —R elasticsearch:elasticsearch /usr/local/elasticsearch #为了避免该普通用户访问elasticsearch相关配置文件无权限,故授权!
su - elasticsearch
/usr/local/elasticsearch/bin/elasticsearch -d #启动elasticsearch
3、Elasticsearch開始エラーを解決するために
上記のようなこのような構成!しばらくしたら、アップelasticsearchプロセスを検索していないでしょう!次に、我々はelasticsearchログを調べる必要があります。
exit #从普通用户切回root用户
tail -n 50 /usr/local/elasticsearch/logs/
エラー:
ソリューション:
vi /etc/sysctl.conf
vm.max_map_count=262144
sysctl -p
#注意上面这个配置文件是系统配置文件,如果你起容器的时候没给--privileged权限,这里就会报错,read only file system!
今では、ログが正常に起動されたことを示しています!
その他のエラー状況:
(1)Seccomp機能がサポートされていません。
ERROR: bootstrap checks failed
system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk;
因为Centos6不支持SecComp,而ES5.3.0默认bootstrap.system_call_filter为true进行检测,所以导致检测失败,失败后直接导致ES不能启动。
ソリューション:
在elasticsearch.yml中配置bootstrap.system_call_filter为false,注意要在Memory下面:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
(2)問題のカーネルパラメータ。
max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
max number of threads [1024] for user [hadoop] is too low, increase to at least [2048]
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
ソリューション:
vim /etc/security/limits.conf
soft nofile 65536
hard nofile 65536
vim /etc/security/limits.d/90-nproc.conf
soft nproc 2048
vim /etc/sysctl.conf
vm.max_map_count=655360
(2)JVMが大きすぎるヒープメモリである
構成が物理メモリに元のメモリよりも大きくなっています。この仮想マシンなので、私は唯一の1Gメモリを与えました!
vim /usr/local/elasticsearch/config/jvm.options
4、安装Kibana
tar xvf kibana-5.3.0-linux-x86_64.tar.gz
mv kibana-5.3.0-linux-x86_64 /usr/local/kibana/
Kibanaは、プロファイル情報を変更します。
vim /usr/local/kibana/config/kibana.yml
指定リスニングポート:
指定モニターカード、すべてのネットワークカードを監視:
サーバアドレスのESを指定するには:
Startコマンドを:nohup /usr/local/kibana/bin/kibana &
5、インストールLogstash
cd /usr/local
tar xvf logstash-5.3.0.tar.gz
mv logstash-5.3.0 logstash
注:logstashを開始するように、これは現在、インストールされている、我々は次のように、我々は簡単な例を行います、それは最初にこれらのログの収集を開始した定義する必要があります!
三つは、標準入力ELKは、ログを収集し、ウェブインタフェースに表示しました
#创建收集日志配置目录;
mkdir -p /usr/local/logstash/config/etc/
cd /usr/local/logstash/config/etc/
ELKは、統合設定ファイルを作成します。次のようにvimのstdin.confは、読み取ります。
input {
stdin { }
}
output {
stdout {
codec => rubydebug {}
}
elasticsearch {
hosts => "172.17.0.2:9200"
}
}
スタートlogstash標準入力キャプチャログ:
/usr/local/logstash/bin/logstash -f /usr/local/logstash/stdin.conf
注:Logstashは、任意の情報ウィンドウに入ります自動的に出力ログ情報の適切なフォーマットを開始
、これは私のIPホストである上記の効果を達成するために、そしてその後、ブラウザで172.16.193.200:5601を入力します(私は、仮想マシン5601に行われましたポートマッピング)。
作成したら、発見するためにもう一度クリックしてください:
標準入力ログが成功し、ELKログプラットフォームをビルド成功に!
第四に、アクセスログ収集清華フォーラム
ただ何のことができます。変更前のドキュメントのstdin.confなどと同じではありません!
vim discuz.conf
#收集论坛访问日志
input {
file {
type => "nginx-access"
path => "/var/log/nginx/access.log"
}
}
#收集MariaDB数据库日志
input {
file {
type => "MySQL-logs"
path => "/var/log/mariadb/mariadb.log"
}
}
#收集内核日志
input {
file {
type => "Kernel-logs"
path => "/var/log/messages"
}
}
output {
elasticsearch {
hosts => "172.17.0.2:9200"
}
}
あなたは、カーネルのログやアプリケーションログを監視するかどうかなど、簡単に埋めるために、ダイレクトタイプ、パス・ログのパスを埋めることができます!!
#我们后台启动即可,因为不需要输入啥,所以放在后台自己运行即可。
nohup /usr/local/logstash/bin/logstash -f /usr/local/logstash/config/getlog.conf.d/discuz.conf &
#输出的内容都在当前目录下的nohup.out文件中,查看nohup.out文件可以看是否成功运行logstash。
tail -fn 50 nohup.out
nginxのとmariadbが正常にログを収集します!
エラーがあるかもしれないこと注:
这个是由于logstash和elasticsearch通信有问题造成的。
おそらく9200ファイアウォールがそこにはlogstashではありませんか、それが原因elasticsearch、アクセスポートを拒否することです。あなたのメモリは両方のプロセスを開始するのに十分である場合があります。変更するのに十分ではないjvm.option
ファイルを
注:お使いのlogstash他のクラウドホスト構成の場合、分散ログ収集。だからあなたの他のクラウドホスト上logstashは0.0.0.0に監視アドレスの設定ファイルを変更する必要があります。また、他のクラウドホストのリスニングポート9600このポートは9600と9200のセキュリティグループにポートelasticsearchの相互作用である上に開いlogstashする必要があります。
V.テンセントクラウドアリ雲+ ESクラスタホストの実装
実験環境:
アリクラウドサーバのパブリックIP:39.97.176.117
テンセントクラウドサーバのパブリックIP:106.54.72.122
elasticsearchプロファイルの疑似分散と、上記の唯一の違い、他は同じであるが、二つのホストは、雲、およびオープン9200,9300ポートセキュリティグループに必要で構成されています。
アリクラウドelasticsearch.yml設定ファイル:
cluster.name: my-application #集群中的所有服务器需一致
node.name: master-node #这个必须不一样
node.master: true #是否是ES集群的主节点
node.data: true #是否是ES集群中的数据节点,不是数据节点一般就会定义为主节点,数据节点是专门存储数据的,但也可以同时为数据和主节点
path.data: /usr/local/elasticsearch/data #数据存储位置,ELK中即为logstash收集的日志数据的存储位置
path.logs: /usr/local/elasticsearch/logs #elasticsearch的日志存储位置
network.host: 0.0.0.0 #监听地址
http.port: 9200
transport.tcp.port: 9300
discovery.zen.ping.unicast.hosts: ["39.97.176.117", "106.54.72.122"]
discovery.zen.minimum_master_nodes: 1 #该属性定义的是为了形成一个集群,有主节点资格并互相连接的节点的最小数目。
テンセントクラウドelasticsearch.yml設定ファイル:
アリ雲はほとんど、いくつかのパラメータだけでなく、同じを以下に示します。
node.name: data-node
node.master: false
node.data: true
ESの2つのクラウドホストが正常に起動した後、クラスタの状態を確認
curl '39.97.176.117:9200/_cluster/state?pretty'