1、ELKさんのプロフィール
1.1 ELKは何ですか
Elasticsearch検索エンジン分散オープンソースであり、その特徴は次のとおり、このような自動負荷探索などの分散、ゼロコンフィギュレーション、自動検出、自動スライスインデックス、インデックス複製機構、安らかスタイルインターフェイス、複数のデータソース、。
Logstashが完全にオープンソースのツールである、彼はあなたのログ、フィルタを収集し、(検索など)後で使用するためにそれを保存することができます。
KibanaはKibanaあなたは、まとめて分析し、重要なデータのログを検索することができますLogstashとElasticSearchフレンドリーWebインターフェイスのための分析を提供することができ、それを記録し、また、オープンソースとフリーのツールです。
1.2、ELKアプリケーション
電気プロバイダのアーキテクチャ
問題
1は、APIは同じではありません、私たちはどのように統合するつもりですか?- 「ダボ定義された均一なAPI仕様
2、操作は---サブシステム間のマーク(トラックユーザーの行動)を有する」ログ
3を、各サブシステムは、それぞれのログを生成するログ統合--- - 「logstash
。4 、AOPは、非同期ログ出力を埋葬しました
特定シナリオ1は、
サードパーティのプリペイド再入金を介して移動されます
ログ出力:毎回プリント非同期呼び出しのログ
分散ロードバランシング:
あまりにも多くのマシンが(このタスクを実行するために、マシンの比較的アイドル電流を選択するために、動的に)充電することができます
問題:
A:ブラザー、今日の助けに電話番号を確認してください138 001 380 000充電ロギング(成功)
B:待ち
5分後
A:方法について
B:待って、終了を確認していなかった3台のマシンを残します
結論:私たちは一緒にすべてのログを整理することができた場合、捜査に問題はないだろう
ソリューション:
- あなたは、データベースにログを置くことができます。
あまりにも多くのデータ、およびログなし標準のログ形式は、データベースプログラムが推奨されていない、と圧力が大きすぎます
- 大きなログを使用したデータ処理方式
コストが高すぎると、各システムログ規則の分散環境は同じではありません。
特定のビジネス慣行
ログ収集:Logstashの
ログストレージ:ElasticSearchの
ログショー:Kibana
台湾・サーバ・ログのが統一されていないが、視覚的な表示を容易にするために、検索ルールをご用意しております
概要
持参の分散問題:複数のノード、ロード・バランシング、ログの分散、高い運用・保守コスト(人物追跡が必要です)
1.3一元ログ管理システム
現在主流の集中ログ管理システムの一部
1、シンプル:のRsyslog
2.商業化:Splunkの
3.オープンソース:スクリーブ(フェイスブック)、Chukwa(アパッチ)
4、ELK最も広範(弾性スタック)(Java言語)
1.4、ELK
ElasticSearch |
ジャワ |
リアルタイム検索および分析エンジンを配布し、彼はのために使用することができる全文検索、構造検索および分析、Luceneの。Solrの |
Logstash |
JRubyの |
リアルタイムのチャネル容量データ収集入力フィルタ、出力モジュールを含むエンジンは、一般的に濾過モジュール内のログフォーマットを解析行います |
Kibana |
JavaScriptを |
分析及び提供するElasticSerachプラットフォームの可視化のWeb プラットフォームを。彼はElasticSerachインデックスの検索、通話データ、および寸法表の図のさまざまなを生成することができます |
1.5ログ
ログ:実行中のトラックの録音プログラム---
レベル:ERROR、INFO、DEBUG、WARN
目的:外国企業のリンクを削除するために見つけるための簡単な情報とレコードの追加情報を見つけます
Filebeatはじめ
、あなたは何千もの顔何百も数十生成されたログサーバ、仮想マシンとコンテナの数千人の、それSSHください別れを持っている場合。Filebeatはシンプルなものが複雑されていないのでこと、軽量タイプの方法では、と要約ログファイルを転送するためにあなたを提供します。
またはLogstash Elasticsearchデータを送信するとき、Filebeatは、より大量のデータを考慮するために、敏感なプロトコルを背圧。Logstashがビジー状態のデータを処理する場合は、Filebeatは、読み出し速度を遅くするために知らせることができます。混雑が解消されると、Filebeatは元のペースに復元し、実行していきます。
どのような環境でも、常にアプリケーションの中断のリスクを潜んでいます。中断がある場合は、ログ行を読んで転送することができFilebeatは、すべての後に正常に戻ってなり、中断前の停止位置から続けています。
2.準備
2.1、インストールCentos7
メモリの2G以上が推奨されます
2.2、基本的な設定
IPアドレスを設定
vi /etc/sysconfig/network-scripts/ifcfg-eno33
service network restart
ユーザーを追加し、許可
[root@localhost ~]# adduser elk1
[root@localhost ~]# passwd elk1
[root@localhost ~]# whereis sudoers
[root@localhost ~]# ls -l /etc/sudoers
[root@localhost ~]# chmod -v u+w /etc/sudoers
[root@localhost ~]# vi /etc/sudoers
## Allow root to run any commands anywher
root ALL=(ALL) ALL
linuxidc ALL=(ALL) ALL #这个是新增的用户
[root@localhost ~]# chmod -v u-w /etc/sudoers
[root@localhost ~]# su elk1
3、ElasticSerach
3.1、Javaのインストール環境
インストールパッケージを抽出
[root@localhost jdk1.8]# tar -zxvf jdk-8u171-linux-x64.tar.gz
Java環境変数を設定します
[root@localhost jdk1.8.0_171]# vi /etc/profile
ファイルの追加
export JAVA_HOME=/home/elk1/jdk1.8/jdk1.8.0_171
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/LIB:$JRE_HOME/LIB:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
[root@localhost jdk1.8.0_171]# source /etc/profile
[root@localhost jdk1.8.0_171]# java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
3.2、ElasticSerachのスタンドアロンインストール
[root@localhost elasticserach]# tar -zxvf elasticsearch-6.3.1.tar.gz
[root@localhost elasticserach]# cd elasticsearch-6.3.1/bin
[root@localhost bin]# ./elasticsearch
[root@localhost bin]# su elk1
[elk1@localhost bin]$ ./elasticsearch
[root@localhost bin]# chown -R elk1:elk1 /home/elk1/elasticsearch
[elk1@localhost bin]$ ./elasticsearch
[elk1@localhost config]$ vi jvm.options
[elk1@localhost bin]$ ./elasticsearch
[root@localhost jdk1.8.0_171]# curl 127.0.0.1:9200
#后台启动
[elk1@localhost bin]$ ./elasticsearch -d
#关闭程序
[elk1@localhost bin]$ ps -ef|grep elastic
[elk1@localhost bin]$ kill 10097
#设置浏览器访问
[root@localhost bin]systemctl stop firewalld
[root@localhost bin]vi config/elasticsearch.yml
インストールの問題:
[1] [2]ソリューション
[root@localhost bin]# vi /etc/security/limits.conf
[3]ソリューション
[root@localhost bin]# vi /etc/sysctl.conf
[root@localhost bin]# sysctl -p
3.3、ElasticSerachクラスタのインストール
設定ファイルを変更しますelasticserach.yml
vim /elasticsearch.yml
cluster.name: aubin-cluster#必须相同
# 集群名称(不能重复)
node.name: els1(必须不同)
# 节点名称,仅仅是描述名称,用于在日志中区分(自定义)
#指定了该节点可能成为 master 节点,还可以是数据节点
node.master: true
node.data: true
path.data: /var/lib/elasticsearch
# 数据的默认存放路径(自定义)
path.logs: /var/log/elasticsearch
# 日志的默认存放路径
network.host: 192.168.0.1
# 当前节点的IP地址
http.port: 9200
# 对外提供服务的端口
transport.tcp.port: 9300
#9300为集群服务的端口
discovery.zen.ping.unicast.hosts: ["172.18.68.11", "172.18.68.12","172.18.68.13"]
# 集群个节点IP地址,也可以使用域名,需要各节点能够解析
discovery.zen.minimum_master_nodes: 2
# 为了避免脑裂,集群节点数最少为 半数+1
注:空のデータとログデータ
192.168.14.12:9200/_cat/nodes?v
3.4、プラグインをインストールヘッド
プラグヘッドをダウンロード
wget https://github.com/mobz/elasticsearch-head/archive/elasticsearch-head-master.zip
YUMのgitをインストールします。また、仮定をダウンロードするにgitを使用することができます
unzip elasticsearch-head-master.zip
のNode.jsをインストールします
wget https://npm.taobao.org/mirrors/node/latest-v4.x/node-v4.4.7-linux-x64.tar.gz
tar -zxvf node-v9.9.0-linux-x64.tar.gz
環境変数を追加するのNode.js
source /etc/profile
テスト
node -v
npm -v
インストールイサキ(イサキは非常に便利なビルドツールです、あなたは圧縮パッケージ、テスト、実行などを作業することができます)
elasticsearchヘッドマスターに
npm install -g grunt-cli
npm install
(npm install -g cnpm --registry=https://registry.npm.taobao.org)
Elasticsearchの設定ファイルを変更し
、以下を追加し、elasticsearch-6.3.1 /設定/ elasticsearch.ymlを編集します:
http.cors.enabled: true
http.cors.allow-origin: "*"
修正Gruntfile.js(注「」)
新しいホスト名、次のプロパティを見つけることが、接続elasticsearchヘッドマスター/ Gruntfile.jsを開きます:「*」:
connect: {
server: {
options: {
hostname: '*',
port: 9100,
base: '.',
keepalive: true
}
}
}
スタートelasticsearchヘッド
进入elasticsearch-head目录,执行命令:grunt server
背景開始elasticsearchヘッド
nohup grunt server &exit
閉鎖性頭部プラグ
ps -aux|grep head
kill 进程号
3.5、ElasticSerach API
elasticsearchのREST APIは、形式に従います。
curl -X<REST Verb> <Node>:<Port>/<Index>/<Type>/<ID>
バージョン情報ESをチェック
curl IP:9200
健康クラスタかどうかを確認してください
http://IP:9200/_cat/health?v
ノードのリストを表示
http://IP:9200/_cat/nodes?v
リストすべてのインデックスとストレージサイズ
http://IP:9200/_cat/indices?v
インデックスを作成します
curl -XPUT 'IP:9200/XX?pretty'
タイプを追加
curl -XPUT 'IP:9200/XX/external/2?pretty' -d '
{
"gwyy": "John"
}'
更新の種類
curl -XPOST 'IP:9200/XX/external/1/_update?pretty' -d '
{
"doc": {"name": "Jaf"}
}'
指定したインデックスを削除
curl -XDELETE 'IP:9200/_index?pretty'
3.6、構成の詳細
ElasticSearch.yml Lは、
関連する構成をES
# 集群的名字,以此作为是否同一集群的判断条件
cluster.name: elasticsearch
# 节点名字,以此作为集群中不同节点的区分条件
node.name: node-1
#设置当前节点既可以为主节点也可以为数据节点
node.master: true
node.data: true
# 索引分片个数,默认为5片
#index.number_of_shards: 5
# 索引副本个数,默认为1个副本
#index.number_of_replicas: 1
# 数据存储目录(多个路径用逗号分隔)
discovery.zen.ping.unicast.hosts: ["192.168.14.14","192.168.14.15"]
discovery.zen.minimum_master_nodes: 2
#数据目录
path.data: /home/elk1/elasticserach/data
# 日志目录
path.logs: /home/elk1/elasticserach/logs
# 修改一下ES的监听地址,这样别的机器才可以访问
network.host: 192.168.14.13
# 设置节点间交互的tcp端口(集群),默认是9300
transport.tcp.port: 9300
# 监听端口(默认的就好)
http.port: 9200
# 增加新的参数,这样head插件才可以访问es
http.cors.enabled: true
http.cors.allow-origin: "*"
Jvm.optionsリットル
JVMの設定
Log4j2.propertiesの
ログ設定
3.7、Elasticserachモード
開発と生産は二つのモードに分かれて
区別する方法
以transport的地址是否绑定在localhost为标准(实际地址)
即:elasticserach.yml文件中的network.host配置
モードの違い
(1)あなたは、次の開発モード例外を起動したときに警告が構成チェックのために要求されます
プロダクションモードの下で(2)の意志起動例外と起動時に迅速な方法エラーの構成チェック
3.8、elasticserach操作
基本的な概念
ドキュメント:ドキュメントオブジェクト
インデックス:インデックス(ライブラリ)
タイプ:データ型指数(表)
フィールド,:フィールド、文書のプロパティ(フィールド)
クエリDSL:クエリ構文(SQL)
CRUD操作
文書の作成
要求を:
POST /newbies/student/1
{
"name":"zhangsan",
"clazz":"0115bigdata",
"description":"we are family"
}
戻り値:
{
"_index": "newbies",
"_type": "student",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
ドキュメントの取得
要求を:
GET newbies/student/1
戻り値:
{
"_index": "newbies",
"_type": "student",
"_id": "1",
"_version": 1,
"found": true,
"_source": {
"name": "zhangsan",
"clazz": "0115bigdata",
"description": "we are family"
}
}
ドキュメントの更新
要求を:
POST /newbies/student/1/_update
{
"doc":{
"description":"hello world"
}
}
戻り値:
{
"_index": "newbies",
"_type": "student",
"_id": "1",
"_version": 2,
"result": "updated",
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
},
"_seq_no": 1,
"_primary_term": 1
}
ドキュメントの削除
要求を:
DELETE newbies/student/1
クエリ結果:
{
"_index": "newbies",
"_type": "student",
"_id": "1",
"found": false
}
Elasticserachクエリ
クエリ文字列
GET /newbies/student/_sea'rch?q=关键字
戻り値:
{
"took": 8,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.2876821,
"hits": [
{
"_index": "newbies",
"_type": "student",
"_id": "1",
"_score": 0.2876821,
"_source": {
"name": "zhangsan",
"clazz": "0115bigdata",
"description": "we are family"
}
}
]
}
}
クエリDSL
GET newbies/student/_search
{
"query":{
"term":{
"name":{
"value":"zhangsan"
}
}
}
}
4、Logstash
4.1、logstashインストール
[root@localhost logstash]# tar -zxvf logstash-6.3.1.tar.gz
[root@localhost logstash-6.3.1]# cd config
[root@localhost config]# vi log4j_to_es.conf
input {
file {
path=>[""]
type=>""
start_position=>"beginning"
}
}
output {
stdout {
codec=>rubydebug
}
}
[root@localhost logstash-6.3.1]# ./bin/logstash -f config/log4j_to_es.conf
4.2、入力、出力、フィルタ
入力
input{file{path=>”/tomcat/logs/abc.log”}}
出力
output{stdout{codec=>rubydebug}}
フィルタを挿入し
GROK
。1、正規表現に基づいた豊富な再利用可能なパターン(模様)を提供し
、この構造に基づいて2を、非構造化データ処理することができ
日付
変換タイムスタンプフィールドタイプの文字列型、その後のデータ処理を容易にするために
のmutate
、追加の修正、削除、および他のフィールドは、交換プロセスに関連
4.3、logstashフォーマットnginxのログ内容
nginx_logstash.confファイルの作成
input {
stdin { }
}
filter {
grok {
match => {
"message" => '%{IPORHOST:remote_ip} - %{DATA:user_name} \[%{HTTPDATE:time}\] "%{WORD:request_action} %{DATA:request} HTTP/%{NUMBER:http_version}" %{NUMBER:response} %{NUMBER:bytes} "%{DATA:referrer}" "%{DATA:agent}"'
}
}
date {
match => [ "time", "dd/MMM/YYYY:HH:mm:ss Z" ]
locale => en
}
geoip {
source => "remote_ip"
target => "geoip"
}
useragent {
source => "agent"
target => "user_agent"
}
}
output {
stdout {
codec => rubydebug
}
}
Logstashはファイルnginxの解析を開始
ヘッドを-n 2 /home/elk1/nginx_logs|./logstash -f ../config/nginx_logstash.conf
リットル結果
{
"user_name" => "-",
"referrer" => "-",
"@timestamp" => 2015-05-17T08:05:32.000Z,
"request" => "/downloads/product_1",
"time" => "17/May/2015:08:05:32 +0000",
"geoip" => {
"country_code3" => "NL",
"longitude" => 4.8995,
"continent_code" => "EU",
"latitude" => 52.3824,
"timezone" => "Europe/Amsterdam",
"country_code2" => "NL",
"ip" => "93.180.71.3",
"country_name" => "Netherlands",
"location" => {
"lat" => 52.3824,
"lon" => 4.8995
}
},
"@version" => "1",
"http_version" => "1.1",
"remote_ip" => "93.180.71.3",
"message" => "93.180.71.3 - - [17/May/2015:08:05:32 +0000] \"GET /downloads/product_1 HTTP/1.1\" 304 0 \"-\" \"Debian APT-HTTP/1.3 (0.8.16~exp12ubuntu10.21)\"",
"bytes" => "0",
"user_agent" => {
"minor" => "3",
"os" => "Debian",
"name" => "Debian APT-HTTP",
"os_name" => "Debian",
"build" => "",
"major" => "1",
"device" => "Other"
},
"agent" => "Debian APT-HTTP/1.3 (0.8.16~exp12ubuntu10.21)",
"host" => "localhost.localdomain",
"response" => "304",
"request_action" => "GET"
}
5、Kibana
5.1、Kibana安装
[root@localhost kibana]# tar -zxvf kibana-6.3.1-linux-x86_64.tar.gz
[root@localhost kibana]# cd kibana-6.3.1-linux-x86_64/config
[root@localhost config]# vi kibana.yml
[root@localhost bin]# ./kibana
5.2、kibana配置
設定ファイルのConfigurationフォルダ
Kibana.yml一般的な設定手順
Server.host/server.port:访问的端口号和地址(地址设置后才能被外网访问)
Elasticsearch.url:访问elasticserach的地址
5.3、kibanaの特長
Discover:数据搜索查看
Visualize:图标制作
Dashboard:仪表盘制作
Timeline:时序数据的高级可视化分析
DevTools:开发者工具
Management:kibana相关配置
6、Filebeat和はpacketbeat
6.1、Filebeatを
ダウンロードFilebeat
https://www.elastic.co/cn/downloads/beats/filebeat
getconf LONG_BIT:システムの中央値を表示
2.2、Packetbeat
Packetbeat概要
クロールネットワークパケット(1)リアルタイム
(2)自動的にアプリケーション層プロトコル(キャプチャ)解析
等DNS、HTTP、Redisのは、MySQL、
Packetbeatクロールelasticserach要求データ
(1)packetbeatディレクトリに入り、ファイルes.ymlを作成
(2)ファイル編集es.yml
packetbeat.interfaces.device: ens33#网卡
packetbeat.protocols.http:
ports: [9200]#es端口
send_request: true#抓取请求信息
include_body_for: ["application/json", "x-www-form-urlencoded"]#包含内容
output.console:
pretty: true#控制台输出
(3)スタートpacketbeat
sudo ./packetbeat -e -c es.yml -strict.perms=false
7、nginxの
安装nginx
#安装依赖环境
yum install gcc-c++
yum install pcre-devel
yum install zlib zlib-devel
yum install openssl openssl-deve
#//一键安装上面四个依赖
#yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
#解压
tar -xvf nginx-1.13.7.tar.gz
#进入nginx目录
cd /usr/local/nginx #执行命令
./configure
#执行make命令make//执行make install命令
make
make install
//启动命令
nginx/sbin/nginx
//停止命令
nginx/sbin/nginx -s stop或者 : nginx -s quit
//重启命令
nginx -s reload
図8に示すように、実際のデータの可視化デモ
8.1、実際の説明
要件:
コレクションクエリElasticserachクラスタ
一般的なクエリステートメント、応答および長期の分析
スキーム
データ収集:Packetbeat + logstash
データ分析:Kibana + Elasticsearch
8.2、準備
Production Cluster(生产环境)
1、Elasticsearch 192.168.14.13:9200
2、Kibana 192.168.14.15:5601
Monitoring Cluster(监控环境)
1、Elasticsearch 192.168.14.16:8200
2、Kibana 192.168.14.16:8601
Logstash\packetbeat
8.3、戦闘
データクラスタの収集を開始
スタートES:
./elasticsearch
設定kibanaを変更
./kibana #启动
データ解析クラスタ起動
(1)ES開始
同上
(2)スタートlogstashを
input {
beats {
port => 5044
}
}
filter {
if "search" in [request]{
grok {
match => { "request" => ".*\n\{(?<query_body>.*)"}
}
grok {
match => { "path" => "\/(?<index>.*)\/_search"}
}
if [index] {
} else {
mutate {
add_field => { "index" => "All" }
}
}
mutate {
update => { "query_body" => "{%{query_body}"}}
}
# mutate {
# remove_field => [ "[http][response][body]" ]
# }
}
output {
#stdout{codec=>rubydebug}
if "search" in [request]{
elasticsearch {
hosts => "127.0.0.1:9200"
}
}
}
(3)スタート
./bin/logstash -f config/log4j_to_es.conf
附录:防火墙配置
1、firewalld的基本使用
启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld
开机禁用 : systemctl disable firewalld
开机启用 : systemctl enable firewalld
2.systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。
启动一个服务:systemctl start firewalld.service
关闭一个服务:systemctl stop firewalld.service
重启一个服务:systemctl restart firewalld.service
显示一个服务的状态:systemctl status firewalld.service
在开机时启用一个服务:systemctl enable firewalld.service
在开机时禁用一个服务:systemctl disable firewalld.service
查看服务是否开机启动:systemctl is-enabled firewalld.service
查看已启动的服务列表:systemctl list-unit-files|grep enabled
查看启动失败的服务列表:systemctl --failed
3.配置firewalld-cmd
查看版本: firewall-cmd --version
查看帮助: firewall-cmd --help
显示状态: firewall-cmd --state
查看所有打开的端口: firewall-cmd --zone=public --list-ports
更新防火墙规则: firewall-cmd --reload
查看区域信息: firewall-cmd --get-active-zones
查看指定接口所属区域: firewall-cmd --get-zone-of-interface=eth0
拒绝所有包:firewall-cmd --panic-on
取消拒绝状态: firewall-cmd --panic-off
查看是否拒绝: firewall-cmd --query-panic
4.那怎么开启一个端口呢
添加
firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,没有此参数重启后失效)
重新载入
firewall-cmd --reload
查看
firewall-cmd --zone= public --query-port=80/tcp
删除
firewall-cmd --zone= public --remove-port=80/tcp --permanent