为什么用到ELK:
一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。

一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。

elk平台搭建

实验环境是系统centos6.7

elasticsearch
在安装elasticsearch一定要确保服务器已经安装java 8版本以及以上版本

如果没有安装java 8
yum -y install java-1.8.0-openjdk``

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

新增个yum配置文件/etc/yum.repos.d/elasticsearch.repo
内容如下

[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

yum -y install elasticsearch

安装完会自动安装个elasticsearch用户

创建elasticsearch data的存放目录,并修改该目录的属主属组
#mkdir /data/esdata
#chown -R elasticsearch:elasticsearch /data/esdata

修改elasticsearch的日志属主属组
chown -R elasticsearch:elasticsearch /var/log/elasticsearch/

修改elasticsearch的配置文件
vim /etc/elasticsearch/elasticsearch.yml

内容:

cluster.name: tomtop
node.name: tomtop-1
path.data: /data/esdata
path.logs: /var/log/elasticsearch/
bootstrap.memory_lock: true
network.host: 192.168.220.100
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
bootstrap.system_call_filter: false

修改参数
vim /etc/security/limits.conf

在末尾加入内容

* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
* soft memlock unlimited
* hard memlock unlimited

继续再修改一个参数
vim /etc/security/limits.d/90-nproc.conf
将里面的1024改为4096(ES最少要求为4096)

如果java虚拟机内存不够,则需要修改内存
vim /etc/elasticsearch/jvm.options
-Xms512m
-Xmx512m

启动
service elasticsearch start

测试elasticsearch

[root@services elasticsearch]# curl http://192.168.220.100:9200/
{
  "name" : "tomtop-1",
  "cluster_name" : "tomtop",
  "cluster_uuid" : "hk-XlmRBTjiEgG6Fr0E3lA",
  "version" : {
    "number" : "6.2.2",
    "build_hash" : "10b1edd",
    "build_date" : "2018-02-16T19:01:30.685723Z",
    "build_snapshot" : false,
    "lucene_version" : "7.2.1",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

使用git安装elasticsearch-head
yum install -y npm
git clone git://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
npm install --registry=https://registry.npm.taobao.org
vim _site/app.js
将http://localhost:9200修改成elasticsearch启动端口地址
npm run start||grunt server
检查端口是否起来
netstat -antp |grep 9100
浏览器访问测试是否正常
http://192.168.220.100:9100/

logstash
直接yum -y install logstash

为logstash命令加上软链接
ln -s /usr/share/logstash/bin/logstash /bin/

编辑logstash配置文件
vim /etc/logstash/conf.d/elk.conf

内容如下:

input {
    file {
        path => "/var/log/messages"
        type => "system"
        start_position => "beginning"
    }
}
filter {
    grok {
        match => {"message" => "%{SYSLOGTIMESTAMP:logdate} services %{WORD:servicename}\[%{NUMBER:pid}\]: %{GREEDYDATA:content}"}
    }
}
output {
    elasticsearch {
        hosts => "192.168.220.100:9200"
        index => "system-%{+YYYY.MM.dd}"
    }
}

执行
logstash -f /etc/logstash/conf.d/elk.conf

kibana
yum -y install kibana

修改kibana配置文件

vim /etc/kibana/kibana.yml

内容如下

server.port: 5601
server.host: "192.168.220.100"
elasticsearch.url: "http://192.168.220.100:9200"
kibana.index: ".kibana"

启动kibana
service kibana start