企业elk部署(未完待续)

什么是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

修改E配置文件

安装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}"
  }
}

发表评论