快速安装EFK日志系统并抓取json格式的NGINX日志

    快速安装EFK日志系统并抓取json格式的NGINX日志


前言

EFK指的是日志管理系统套件elasticsearch,filebeat,kibana这三个开源软件所组成的一套软件。也就是说,这三个软件通常是配合在一起使用的。当然,比较常用的套件搭配是ELK,也就是elasticsearch,logstash,kibana这三个软件组成一个套件。

Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasticsearch 数据库中,再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据,当用户搜索数据时候,再根据权重将结果排名,打分,再将返回结果呈现给用户。

Filebeat是一个轻量级日志传输Agent,可以将指定日志转发到Logstash、Elasticsearch、Kafka、Redis等中。Filebeat占用资源少,而且安装配置也比较简单,支持目前各类主流OS及Docker平台。

Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看存放在Elasticsearch中的数据。Kibana与Elasticsearch的交互方式是各种不同的图表、表格、地图等,直观的展示数据,从而达到高级的数据分析与可视化的目的。
Elasticsearch、Logstash和Kibana这三个技术就是我们常说的ELK技术栈,可以说这三个技术的组合是大数据领域中一个很巧妙的设计。一种很典型的MVC思想,模型持久层,视图层和控制层。Logstash担任控制层的角色,负责搜集和过滤数据。Elasticsearch担任数据持久层的角色,负责储存数据。而Kibana担任视图层角色,拥有各种维度的查询和分析,并使用图形化的界面展示存放在Elasticsearch中的数据。

多说几句,elasticsearch是使用java开发的,意思很清楚,凡是要运行elasticsearch的地方都需要有java环境,filebeat是使用go语言开发的,因此轻量,高效,尤其是相对于logstash。kibana是使用js开发的,这个没什么好说的。

 

 


 

一、安装步骤

  • 安装方式  清华源的RPM包直接安装,因为是套件,所以必须三个软件版本一致,二进制方式也可以,但网速限制过多。
  • 安装环境的基本要求  epel源,最好是阿里云的
  • 安装环境的介绍   :既然是快速安装,就单机EFK,两台机器,第一台--安装EK,第二台安装F和NGINX,
  • 第一台的配置:虚拟机,centos7,内核版本3.11,IP 192.168.0.17,4CPU4G内存
  • 第二台的配置:虚拟机,centos7,内核版本3.11,IP 192.168.0.18.4CPU4G内存

二、RPM相关包的下载

https://mirrors.tuna.tsinghua.edu.cn/elasticstack/yum/elastic-6.x/6.8.12/

该页面内下载  filebeat-6.8.12-x86_64.rpm elasticsearch-6.8.12.rpm kibana-6.8.12-x86_64.rpm

三、第一台机器的安装配置

yum install java-1.8.0-openjdk* -y 命令执行完毕后,java -version 查看,有输出版本jdk安装完毕。

当然,也可以使用二进制包安装,但该方法需要在后续的elasticsearch和kibana内指定JAVA_HOME,安装脚本为我写的博客:

https://blog.csdn.net/alwaysbefine/article/details/107581440

  • 安装elasticsearch 

rpm -ivh elasticsearch-6.8.12.rpm 或者yum install elasticsearch-6.8.12.rpm -y

该软件只有唯一环境依赖jdk,没有别的软件依赖,安装完毕后修改配置文件

vim /etc/elasticsearch/elasticsearch.yml

找到network.host和http.port ,值修改为如下,(该文件为yaml语言配置文件,该语言在ansible和saltstack中广泛使用,需要特别注意空格什么的,其内容一般为键值对形式存在)

network.host: 192.168.0.17
http.port: 9200

  • 启动服务并加入开机启动

systemctl enable elasticsearch

systemctl start elasticsearch#重点说一下,这个服务脚本不会当时报警(有错没错不知道,必须看下status,和k8s比较类似)

  • 验证服务是否正常

systemctl status elasticsearch #查看服务状态

curl 192.168.0.17:9200#如果有返回内容如下,正常,服务安装完毕。

root@centos7 ~]# curl 192.168.0.17:9200
{
  "name" : "NxlzYXo",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "1TIeg5apSsesAZsC4zQqTg",
  "version" : {
    "number" : "6.8.12",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "7a15d2a",
    "build_date" : "2020-02-12T07:27:20.804867Z",
    "build_snapshot" : false,
    "lucene_version" : "7.7.3",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

 


安装kibana

这个比较好安装了,rpm -ivh kibana-6.8.12-x86_64.rpm 或者yum install kibana-6.8.12-x86_64.rpm -y

vim /etc/kibana/kibana.yml #以下内容修改为:

server.port: 5601#可更改端口,前提是确保没被占用即可

server.host: "192.168.0.17"#指定kibana绑定的地址,安装在哪就写哪的IP,当然,现在是17

elasticsearch.hosts: ["http://192.168.0.17:9200"] #读取日志数据的接口,设为服务器地址,如果这里使用localhost,那么,会报错:server is not ready yet

i18n.locale: "zh-CN" #web界面更改为中文,英语比较好的同学不用改

  • 服务的启动以及服务加入开机启动

systemctl enable kibana

systemctl start kibana &&systemctl status kibana#重点说一下,这个服务脚本不会当时报警(有错没错不知道,必须看下status,和k8s比较类似)

  • kibana服务状态的验证

确保关闭了防火墙和selinux,别的任意一个浏览器,输入 192.168.0.17:5601,应该可以看到界面。


ln -s /usr/local/jdk/bin/java /usr/bin/,如果是使用脚本安装jdk的话,执行该命令

、第二台机器的配置安装

  • 安装nginx

https://blog.csdn.net/alwaysbefine/article/details/107413072 #我写的安装脚本,完全自动化

验证:关闭防火墙和selinux,打开局域网内任意浏览器,输入 192.168.0.18 可以看到NGINX的欢迎界面。

  • 格式化NGINX日志格式为json
http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  log_json  '{"@timestamp": "$time_local","user_ip":"$http_x_real_ip","lan_ip":"$remote_addr","log_time":"$time_iso8601","user_req":"$request","http_code":"$status","body_bytes_sents":"$body_bytes_sent","req_time":"$request_time","user_ua":"$http_user_agent"}';
     access_log  /usr/local/nginx/logs/access.log  log_json;#注意,这个路径是日志存放路径,别写错

打开NGINX的主配置文件,在http这一模块内添加log_format log_json这一长串对象,重启NGINX服务,

service nginx restart, 此时,访问192.168.0.18,应该刷新出新的日志,并且格式为json了。

 

  • 安装filebeat

rpm -ivh filebeat-6.8.12-x86_64.rpm或者 yum  install filebeat-6.8.12-x86_61.rpm -y

  • filebeat的配置修改
[root@centos8 ~]# cat filebeat.yml 
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /usr/local/nginx/logs/*.log
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: true
setup.template.settings:
  index.number_of_shards: 3
setup.kibana:
  host: "192.168.0.17:5601"
output.elasticsearch:
  hosts: ["192.168.0.17:9200"]
processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~
  • 服务启动并加入开机启动

systemctl enable filebeat

systemctl start filebeat && systemctl status filebeat

  • 验证filebeat服务

打开任意浏览器,输入 192.168.0.17:5601

依次点击管理---索引模式--创建索引模式

多访问几次 nginx以产生日志,点击kibana的日志,即可看到所产生的日志了。


  • 总结

jdk建议使用yum安装的方式,否则会出现很多缺失JAVA_HOME环境的报错,此时,就需要软链接java执行程序到 /usr/bin/目录内。如果是使用logstash,指定JAVA_HOME会更麻烦些。

EFK和ELK的服务极为类似k8s的服务,启动后不显示成功与否,需要查看服务状态才可知道是否成功。

kibana的汉化看个人的英语水平,我反正基本不需要,对汉化的支持是6.5版本以后,如果没记错的话,因此,本次安装选择的是6.8.12版本。如果是后面修改的i18n.locale: "zh-CN",请重启kibana服务。

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚风_END

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值