因此,须要一个平台能够集中式的、独立的、搜集管理各个做事和做事器上的日志信息,并且集中管理,供应良好的UI界面进行数据展示,处理剖析。

ELK 是什么

ELK 是 elastic 公司旗下三款开源框架 ElasticSearch 、Logstash 、Kibana 的首字母的缩写。
它供应了一套办理方案,并且都是开源软件,三个软件之间相互合营利用,高效地知足了很多场景的运用。
是当下主流的一种日志系统。

ELK 架构

php搭建系统文件架构一篇文章带你懂得企业级开源日记平台ELK的架构和搭建 AJAX

以上是 ELK 技能栈的一个架构图。
从图中可以清楚的看到数据流向:

Beats 是单一用场的数据传输平台,它可以将多台机器的数据发送到 Logstash 或 ElasticSearch。
目前Beats包含四种工具:Packetbeat(搜集网络流量数据)Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存利用情形等数据)Filebeat(搜集文件数据)Winlogbeat(搜集 Windows 事宜日志数据)Logstash 是一个动态数据网络管道。
支持以 TCP/UDP/HTTP 多种办法网络数据(也可以接管 Beats 传输来的数据),并对数据做进一步丰富或提取字段处理。
ElasticSearch 是一个基于 JSON 的分布式的搜索和剖析引擎。
作为 ELK 的核心,它集中存储数据。
Kibana 是 ELK 的用户界面。
它将网络的数据进行可视化展示(各种报表、图形化数据),并供应配置、管理 ELK 的界面。
ELK 经典运用处景

Logstash支配至做事主机,对各个做事的日志进行采集、过滤、推送。
Elasticsearch存储Logstash传送的构造化数据,供应给Kibana。
Kibana供应用户UIweb页面进行,数据展示和剖析形成图表等

把稳:logs 泛指,各种日志文件以及日志信息:windows,negix,tomcat,webserver等等。

ELK 安装

2.1 elasticsearch安装(以CentOS6为例)

安装JDK1.8(此处略)下载并安装GPG key

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch添加yum仓库

vim /etc/yum.repos.d/elasticsearch.repo[elasticsearch-6.x]name=Elasticsearch repository for 6.x packagesbaseurl=https://artifacts.elastic.co/packages/6.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearchenabled=1autorefresh=1type=rpm-md安装elasticsearch

yum install -y elasticsearchchkconfig --add elasticsearch

2.2 logstash安装

下载并安装GPG key

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch添加yum仓库

cat>/etc/yum.repos.d/logstash.repo<<'EOF'[logstash-6.x]name=Elastic repository for 6.x packagesbaseurl=https://artifacts.elastic.co/packages/6.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearchenabled=1autorefresh=1type=rpm-mdEOF安装logstash

yum install -y logstash

2.3 kibana安装

下载并安装GPG key

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch添加yum仓库

cat>/etc/yum.repos.d/kibana.repo<<EOF[kibana-6.x]name=Kibana repository for 6.x packagesbaseurl=https://artifacts.elastic.co/packages/6.x/yumgpgcheck=1gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearchenabled=1autorefresh=1type=rpm-mdEOF安装kibana

yum install -y kibanachkconfig --add kibanaELK 配置

3.1 配置elasticsearch

修正elasticsearch配置文件

vim /etc/elasticsearch/elasticsearch.ymlcluster.name: zy-es-clusternode.name: node-1path.data: /alidata/es-datapath.logs: /var/log/elasticsearch#锁住内存,使内存不会再swap中利用bootstrap.memory_lock: true bootstrap.system_call_filter: false#这个参数是用来同时设置bind_host和publish_host两个参数,一样平常设置这个参数就行,分外情形下可能须要分别设置network.host: 0.0.0.0#设置绑定的ip地址,默认为0.0.0.0,绑定这台机器的任何一个ip#network.bind_host: 0.0.0.0#设置其它节点和该节点交互的ip地址,如果不设置它会自动判断。
#network.publish_host: X.X.X.X#设置对外做事的http端口,默认为9200http.port: 9200#设置节点之间交互的tcp端口,默认是9300transport.tcp.port: 9300#设置集群中节点discovery.zen.ping.unicast.hosts: [\"大众IP地址\"大众]mkdir -p /alidata/es-datachown elasticsearch.elasticsearch /alidata/es-data优化系统参数

vim /etc/security/limits.conf soft nofile 65536 hard nofile 65536 soft memlock unlimited hard memlock unlimitedvim /etc/security/limits.d/90-nproc.conf soft nproc 4096root soft nproc unlimited启动elasticsearch

设置java路径:

ln -sv /home/jdk1.8.0_121/bin/java /usr/bin/service elasticsearch startnetstat -lntp|grep 9200验证

[root@ysc-251 elasticsearch]# curl -X GET localhost:9200{ \公众name\公众 : \公众node-1\公众, \"大众cluster_name\公众 : \"大众zy-es-cluster\"大众, \公众cluster_uuid\公众 : \"大众Hx_Vc1OASTi75iFCI2lWTQ\"大众, \公众version\"大众 : { \公众number\"大众 : \公众6.5.1\公众, \"大众build_flavor\公众 : \公众default\"大众, \公众build_type\"大众 : \公众rpm\"大众, \"大众build_hash\"大众 : \"大众8c58350\"大众, \公众build_date\公众 : \公众2018-11-16T02:22:42.182257Z\公众, \"大众build_snapshot\"大众 : false, \"大众lucene_version\公众 : \"大众7.5.0\公众, \公众minimum_wire_compatibility_version\公众 : \"大众5.6.0\公众, \"大众minimum_index_compatibility_version\"大众 : \"大众5.0.0\公众 }, \"大众tagline\"大众 : \"大众You Know, for Search\"大众}安装Head插件

新版elasticsearch不支持直接在plugins里运行插件,需单独安装。

yum install -y git npmgit clone git://github.com/mobz/elasticsearch-head.gitcd elasticsearch-headnpm config set strict-ssl falsenpm install grunt -save#修正head连接es的地址:vim _site/app.jsthis.base_uri = this.config.base_uri || this.prefs.get(\"大众app-base_uri\"大众) || \公众http://localhost:9200\"大众;把localhost修正成es做事器外网地址,如:this.base_uri = this.config.base_uri || this.prefs.get(\"大众app-base_uri\公众) || \"大众http://IP地址:9200\公众;npm installnpm run start &netstat -lntp |grep 9100注:由于head插件监听的端口是9100,而elasticsearch的REST接口的端口是9200,因此须要设置elasticsearch许可跨域访问,才能利用head插件。
#修正elasticsearch支持跨域访问并重启vim /etc/elasticsearch/elasticsearch.ymlhttp.cors.enabled: truehttp.cors.allow-origin: \公众\"大众service elasticsearch restart

浏览器访问http://ES外网地址:9100 即可访问head插件

3.2 配置logstash

查看已安装插件:

/usr/share/logstash/bin/logstash-plugin list基本的输入输出

/usr/share/logstash/bin/logstash -e 'input{stdin{}} output{stdout{}}' 在终端输入 helloworld,回车看返回结果:2018-11-30T07:39:58.021Z ysc-251 helloworld写入到elasticsearch

/usr/share/logstash/bin/logstash -e 'input { stdin{} } output { elasticsearch { hosts => [\公众IP地址:9200\公众] } }'

在elasticsearch中查看logstash新加的索引

编写大略的测试conf文件

[root@ysc-251 conf.d]# cat normal.conf input { stdin { } }output { elasticsearch { hosts => [\"大众IP地址:9200\"大众] } stdout { codec => rubydebug } }实行 /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/normal.conf默认分片副本为1,修正分片副本数量为1

curl -XPUT 'http://IP地址:9200/_all/_settings' -H 'Content-Type: application/json' -d '{ \"大众index.number_of_replicas\公众 : \公众1\"大众}'

3.3 配置kibana

修正kibana配置文件

[root@ysc-251 elasticsearch-head]# grep '^[a-Z]' /etc/kibana/kibana.yml server.port: 5601server.host: \"大众0.0.0.0\"大众elasticsearch.url: \公众http://IP地址:9200\"大众kibana.index: \"大众.kibana\公众启动kibana

service kibana start验证

浏览器访问IP地址:5601 在kibana中添加一个es-索引 验证es的muliline插件是否生效

http://IP地址/status 可以查看kibana运行状态。

实际运用

网络nginx的访问日志

logstash可以通过內建模板解析Nginx日志字符串,不过直接在Nginx配置中直接json字符串最为方便。

从1.11.8开始Nginx已经支持json格式,如果版本低于这个建议利用nginx-http-json-log扩展。

编辑nginx.conf,在server节定义json日志格式

log_format logstash_json '{\公众@timestamp\公众:\"大众$time_iso8601\"大众,' '\"大众remote_addr\"大众:\"大众$remote_addr\"大众,' '\公众remote_user\公众:\公众$remote_user\"大众,' '\公众body_bytes_sent\"大众:\公众$body_bytes_sent\公众,' '\"大众request_time\公众:\公众$request_time\公众,' '\"大众status\"大众:\"大众$status\公众,' '\公众host\"大众:\公众$host\"大众,' '\公众uri\公众:\"大众$uri\公众,' '\公众server\公众:\公众$server_name\"大众,' '\公众port\"大众:\"大众$server_port\"大众,' '\"大众protocol\"大众:\"大众$server_protocol\"大众,' '\"大众request_uri\"大众:\"大众$request_uri\公众,' '\公众request_body\公众:\"大众$request_body\"大众,' '\"大众request_method\公众:\"大众$request_method\"大众,' '\"大众http_referrer\公众:\公众$http_referer\"大众,' '\"大众body_bytes_sent\公众:\公众$body_bytes_sent\"大众,' '\"大众http_x_forwarded_for\"大众:\"大众$http_x_forwarded_for\"大众,' '\"大众http_user_agent\"大众:\"大众$http_user_agent\"大众,' '\"大众upstream_response_time\"大众:\"大众$upstream_response_time\"大众,' '\公众upstream_addr\公众:\"大众$upstream_addr\公众}';

然后Nginx配置下指定json模板日志格式

access_log /alidata/tengine/logs/access.log logstash_json ;

重启Nginx

利用logstash将nginx访问日志网络起来,连续写到all.conf中

input { file { path => \"大众/alidata/tengine/logs/default.log\"大众 codec => json start_position => \"大众beginning\"大众 type => \"大众nginx-log\公众 }}output { if [type] == \"大众nginx-log\"大众 { elasticsearch { hosts => [\"大众172.17.134.34:9200\公众] index => \"大众nginx-log-%{+YYYY.MM.dd}\公众 } }}

网络系统日志

[root@ysc-251 conf.d]# cat system.conf input { file { path => \公众/var/log/messages\"大众 type => \公众system\"大众 start_position => \"大众beginning\"大众 }}output { elasticsearch { hosts => [\"大众172.17.134.34:9200\公众] index => \"大众system-%{+YYYY.MM.dd}\"大众 }}[root@ysc-251 conf.d]# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/system.conf