什么是ELK?
通俗的来说,ELK是由于Elasticsearch、logstash、kibana。三个开源软件组成的一个组合体,这三个软件中,每一个软件用于完成不同的功能,ELK又称为ELKstack,官方域名:stackic.co,ELK的主要的优点有如下这几个
- 处理方式灵活:Elasticsearch是实时全文索引,具有强大的搜索功能
-
配置相对简单:Elasticsearch全部使用JSON接口,logstash使用模块配置,kibana的配置文件部分更加的简单
-
检索性能高效:基于优秀的设计,虽然每一次的查询都是实时,但是也可以达到百亿级别的数据查询秒级响应
-
集群线性扩展:elasticsearch和logstash都可以灵活性扩展
-
前端操作绚丽:kibana的前端设计比较的华丽,而且操作简单
什么是Elasticsearch?
是一个高度可扩展性的开源全文搜索分析引擎,它可以实现数据的实时全文搜索、搜索、支持分布式可以实现高可用、提供API接口,可以处理大规模的日志数据,例如:Nginx、Tomcat、系统日志等
- elasticsearch 建议单独一个盘使用最好做RAID10,I/O压力会很大
什么是Kibana?
主要是通过接口调用elasticsearch的数据,并且进行前端数据可视化的展现
部署ELK详细
centos7以上的版本cpu>2核,内存>4G。系统盘大于50G
- host配置
-
磁盘的挂载
-
防火墙和selinux关闭
-
文件描述符调大
-
系统初始化时间同步
-
配置java环境
基础规划
基础的环境配置
yum -y install net-tools vim lrzsz tree screen lsof tcpdump wget ntpdate
yum -y install java-1.8.0-openjdk
虚拟内存
Elasticsearch hybrid mmapfs / niofs默认使用目录来存储其索引。mmap计数的默认操作系统限制可能太低,这可能会导致内存不足异常。
- 修改系统配置
修改临时的:
sysctl -w vm.max_map_count=262144
修改为永久的:
vim /etc/sysctl.conf
sysctl vm.max_map_count
查看当前值:
sysctl vm.max_map_count
echo "* soft nofile 65536">>/etc/security/limits.conf
echo "* hard nofile 65536">>/etc/security/limits.conf
安装elasticsearch插件之head
插件是为了完成了不同的功能,官方提供了一些插件但是大部分是收费的,另外的一些开发爱好者提供的插件,可以实现对elasticsearch集群的状态监控与管理配置等功能。
- https://github.com/mobz/elasticsearch-head #官方安装地址
yum -y install npm #NPM是(Node Package Manager)是随着Nodejs一起安装的包管理和分发的工具,它很方便让JavaScript开发者下载安装、上传以及管理已经安装的包
cd /data/src
git clone https://github.com/mobz/elasticsearch-head.git
cd elsticsearch-head
nmp install grunt-save
node_modules/grunt #确定生成文件
nmp install #执行安装
分析NGINX日志
自定义nginx日志格式为JSON
- nginx -s reload过程,在nginx主进线中创建新的子进程,旧的进程如有有数据就继续处理,没有就会关闭,用新的去处理数据
vim /usr/local/nginx/logs/nginx.conf
mkdir -p /var/log/nginx
log_format access_json '{"@timestamp":"time_iso8601",' '"host":"server_addr",'
'"clientip":"remote_addr",'
'"size":"body_bytes_sent",' '"responsetime":"request_time",'
'"upstreamtime":"upstream_response_time",' '"upstreamhost":"upstream_addr",'
'"http_host":"host",' '"url":"uri",'
'"domain":"host",' '"xff":"http_x_forwarded_for",'
'"referer":"http_referer",' '"status":"status",}';
access_log /var/log/nginx/access.log access_json;
nginx -t;nginx -s reload #重载一下配置文件
让logstash去收集日志
vim etc/logstash/conf.d/nginx-accesslog.conf
input {
file {
path => "var/log/nginx/access.log"
type => "nginx-access-log"
start_position => "beginning"
start_interval => "2"
}
}
output {
elasticsearch {
hosts => ["xxx.xxx.xxx:9200"]
index => "logstash-nginx-access-log-%{+YYYY.MM.dd}"
}
}