因此,须要一个平台能够集中式的、独立的、搜集管理各个做事和做事器上的日志信息,并且集中管理,供应良好的UI界面进行数据展示,处理剖析。
ELK 是什么ELK 是 elastic 公司旗下三款开源框架 ElasticSearch 、Logstash 、Kibana 的首字母的缩写。 它供应了一套办理方案,并且都是开源软件,三个软件之间相互合营利用,高效地知足了很多场景的运用。是当下主流的一种日志系统。
ELK 架构
以上是 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 keyrpm --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 keyrpm --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 keyrpm --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