日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员能够经过日志了解服务器软硬件信息、检查配置过程当中的错误及错误发生的缘由。常常分析日志能够了解服务器的负荷,性能安全性,从而及时采起措施纠正错误。
一般,日志被分散的储存不一样的设备上。若是你管理数百上千台服务器,你还在使用依次登陆每台机器的传统方法查阅日志。这样是否是感受很繁琐和效率低下。当务之急咱们使用集中化的日志管理,例如:开源的syslog,将全部服务器上的日志收集汇总。集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,通常咱们使用grep、awk和wc等Linux命令能实现检索和统计,可是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法不免有点力不从心。
开源实时日志分析ELK平台可以完美的解决咱们上述的问题,ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成。前端
官方网站:https://www.elastic.co/cn/node
· 简单介绍一下服务的技术架构:python
Elasticsearch是个开源分布式搜索引擎,它的特色有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。linux
Logstash是一个彻底开源的工具,他能够对你的日志进行收集、过滤,并将其存储供之后使用(如,搜索)。git
Kibana 也是一个开源和免费的工具,它Kibana能够为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,能够帮助您汇总、分析和搜索重要数据日志。github
Kafka:接收用户日志的消息队列web
· ELK工做的原理图以下:数据库
Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。 npm
System: CentOS 7json
ElasticSearch: 6.2.3
Logstash: 6.2.3
Kibana: 6.2.3
Java: JDK8
一、设置hostname,打开文件/etc/hostname,将内容改成elk用户关闭防火墙(若是由于其余缘由不能关闭防火墙,也请不要禁止80端口):
systemctl stop firewalld.service
二、禁止防火墙自动启动:
systemctl disable firewalld.service
三、打开文件/etc/security/limits.conf,添加下面四行内容:
* soft nofile 65536 * hard nofile 131072 * soft nproc 2048 * hard nproc 4096
四、打开文件/etc/sysctl.conf,添加下面一行内容:
vm.max_map_count=655360
五、加载sysctl配置,执行命令:
sysctl –p
# sysctl -P 报"unknown key"错误解决办法 [root@Docker ~]# sysctl -p net.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key error: "net.bridge.bridge-nf-call-iptables" is an unknown key error: "net.bridge.bridge-nf-call-arptables" is an unknown key kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.shmmax = 2576980377 kernel.shmall = 2097152 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 fs.file-max = 6815744 fs.aio-max-nr = 1048576 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 4194304 net.core.rmem_max = 4194304 net.core.wmem_default = 1048576 net.core.wmem_max = 1048576 解决办法: 注:此错误能够忽视,也可使用下面命令解决。 [root@Docker ~]# modprobe bridge [root@Docker ~]# lsmod |grep bridge bridge 48077 0 stp 2067 1 bridge llc 5352 2 bridge,stp [root@oracle11gr2 Packages]# sysctl -p net.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0 kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.shmmax = 2576980377 kernel.shmall = 2097152 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 fs.file-max = 6815744 fs.aio-max-nr = 1048576 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 4194304 net.core.rmem_max = 4194304 net.core.wmem_default = 1048576 net.core.wmem_max = 1048576
六、重启电脑(修改完,必须重启生效,否则会有意想不到的异常)
reboot
Elasticsearch是一个实时的分布式搜索分析引擎, 它能让你以一个以前从未有过的速度和规模,去探索你的数据。它被用做全文检索、结构化搜索、分析以及这三个功能的组合。
如下是公司使用案例:
· Wikipedia使用Elasticsearch提供带有高亮片断的全文搜索,还有search-as-you-type和did-you-mean的建议。
· 卫报 使用Elasticsearch将网络社交数据结合到访客日志中,实时的给它的编辑们提供公众对于新文章的反馈。
· Stack Overflow将地理位置查询融入全文检索中去,而且使用more-like-this接口去查找相关的问题与答案。
· GitHub使用Elasticsearch对1300亿行代码进行查询。
然而Elasticsearch不只仅为巨头公司服务。它也帮助了不少初创公司,像Datadog和Klout, 帮助他们将想法用原型实现,并转化为可扩展的解决方案。Elasticsearch能运行在你的笔记本电脑上,或者扩展到上百台服务器上去处理PB级数据。
Elasticsearch中没有一个单独的组件是全新的或者是革命性的。全文搜索好久以前就已经能够作到了, 就像早就出现了的分析系统和分布式数据库。革命性的成果在于将这些单独的,有用的组件融合到一个单一的、一致的、实时的应用中。它对于初学者而言有一个较低的门槛, 而当你的技能提高或需求增长时,它也始终能知足你的需求。
1.1 解压ElasticSearch
tar -zxvf elasticsearch-6.2.3.tar.gz cd elasticsearch-6.2.3/
1.2 安装Head插件(Optional):
# elasticsearch5 以前的安装方法 1.https://github.com/mobz/elasticsearch-head 下载zip 解压 2.创建${ES_HOME}\plugins\head\文件夹 3.将解压后的elasticsearch-head-master文件夹下的全部文件copy到head 4.运行es 5.打开http://localhost:9200/_plugin/head/
由于head是一个用于管理Elasticsearch的web前端插件,该插件在ES5版本之后采用独立服务的形式进行安装使用(以前的版本能够直接在es安装目录中直接安装),由于须要安装nodejs、npm
# elasticsearch5 以后的安装方法 yum -y install nodejs npm #若是没有安装git,还须要先安装git: yum -y install git #而后安装elasticsearch-head插件: git clone https://github.com/mobz/elasticsearch-head.git #git下载完成后,进入目录,进行操做: cd elasticsearch-head/ npm install #插件安装相对会慢一些,请耐心等待... # 插件启动前,须要先对插件进行一些相关配置 # - 修改elasticsearch.yml,增长跨域的配置(须要重启es才能生效): # 加入配置: http.cors.enabled: true http.cors.allow-origin: "*" # 修改Gruntfile.js(编辑head/Gruntfile.js)文件,修改服务监听地址(增长hostname属性,将其值设置为*) # 如下两种配置都是OK的 # 方式一: connect: { hostname: '*', server: { options: { port: 9100, base: '.', keepalive: true } } } # 方式二: connect: { server: { options: { hostname: '*', port: 9100, base: '.', keepalive: true } } } 编辑head/_site/app.js,修改head链接es的地址,将localhost修改成es的IP地址 # 原配置 this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200"; # 将localhost修改成ES的IP地址 this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://IP:9200"; # 启动elasticsearch-head cd elasticsearch-head/ && ./node_modules/grunt/bin/grunt server # 放到后台进行运行,nohup,&,screen等各类方法操做。另外,开机启动、保持持久运行等能够 # 考虑配置rc.local、supervisord等来实现。
tar -zxvf logstash-6.2.3.tar.gz
在logstash-6.2.3目录下的 config 文件夹中,新建一个配置文件 logstash.conf
# input方式一:监听8080端口做为输入 #input { # beats { # port => "8080" # } #} # input方式二:从指定文件中做为输入信息源 input { file { codec => json path => "/home/redhat/ZYC_PAYMENT/PaymentWebApplication/build/*.json" # 改为你项目打印的json日志文件 } } # 数据过滤 filter { grok { match => { "message" => "%{TIMESTAMP_ISO08601:timestamp}\s+%{LOGLEVEL: severity}\s+\[%{DATA:service},%{DATA:trace},%{DATA:span},%{DATA:exportable}\]\s+%{DATA:pid}---\s+ \[%{DATA:thread}\]\s+%{DATA:class}\s+:\s+%{GREEDYDATA:rest}" } } } # 输出配置为本机的9200端口,这是ElasticSerach服务的监听端口 output { elasticsearch { hosts => "127.0.0.1:9200" # 改为你的 Elasticsearch 地址 } }
在bin目录后台启动Logstash服务:
nohup ./logstash -f ../config/logstash.conf –config.reload.automatic &
查看启动日志:tail -f ../logs/logstash-plain.log ,日志正常输出,不报错及启动成功!
tar -zxvf kibana-6.2.3-linux-x86_64.tar.gz
打开Kibana的配置文件 kibana-6.2.3-linux-x86_64/config/kibana.yml,找到下面这行:
#server.host: "localhost"
改为以下内容:
server.host: "192.168.1.81"
这样其余电脑就能用浏览器访问Kibana的服务了;
进入Kibana的bin目录:/home/redhat/ELK/kibana-6.2.3-linux-x86_64/bin
执行启动命令:nohup ./kibana &
查看启动日志:tail -f nohup.out
至此,ELK服务启动成功。
git clone https://github.com/anbai-inc/Kibana_Hanization.git cd Kibana_Hanization/ python main.py /home/redhat/ELK/kibana-6.2.3-linux-x86_64/ systemctl restart kibana
以后的访问效果以下: