完整ELK日志收集框架环境搭建教程

  • 背景

通常,日志被分散在储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理;

ELK功能:Kibana用来展现数据、Elasticsearch用来存储数据、Logstash用来收集数据通过三者的结合来实现日志集中化管理;

  • 搭建环境要求

Java环境必须在JDK1.8以上 :Elasticsearch、Logstash依赖于java环境 JDK下载路径如下:

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

  • 基础环境搭建

1.首先搭建Kibana

Kibana是用来展现数据

https://artifacts.elastic.co ELK二进制jar包下载路径

云盘:(包含此架构需要的所有二进制压缩包)

链接:https://pan.baidu.com/s/1r4KsX9nKxuRbXWmdacAChg

提取码:cxcx

安装步骤:

(1)下载二进制jar包解压即可

 

(2)解压完成:修改Kibana配置 config/kibana.yml

server.port: 5601

server.host: "0.0.0.0"

 

启动问题

  •  直接用到bin目录下执行./kibana即可
  • Kibana: nohup bin/kibana >/tmp/kibana.log 2>/tmp/kibana.log &
  •  访问Kibana,需要开放5601端口(开发命令如下:
  •   到/etc/sysconfig目录下执行以下两条命令  注意:此命令需要root账号执行
  •   firewall-cmd --permanent --add-port=5601/tcp   其中5601 是你想要访问的端口
  •   firewall-cmd --reload
  •  

关闭问题:因为kibana是用node写的 运行在node上 直接用ps -ef | grep kibana找不到进程

这里通过netstat -nap | grep 5601  通过端口查询到进程 kill调即可

安全说明:默认无密码,也是谁都能够访问 可以借用ngnix实现用户名密码登陆

 

  1. 搭建Elasticsearch 环境

 首先前提是在Java8环境下

安装步骤:

(1)下载二进制包 解压

(2)修改配置文件/config/elasticsearch.yml

path.data: /home/elk/elasticsearch/elasticsearch-6.6.0/data   是es的全路径

path.logs: /home/elk/elasticsearch/elasticsearch-6.6.0/logs    是es的全路径

network.host: 127.0.0.1       这个地址是kibana指向的地址      

http.port: 9200              这个端口是kibana指向的端口

 

注意:.yml文件 冒号后边有数据的话 中间必须有空格

(3)JVM内存限制修改 默认为1g 我这里改为128

更改配置文件jvm.options  (配置文件修改 vi 与 vim的区别 前者普通文本 后者带格式)

-Xms128M

-Xmx128M

(4)Elasticsearch的启动,得用普通用户启动

 如果是在root账户下安装的elasticsearch  在root使用以下语句

chown linux用户名 elasticsearch安装目录 -R   例如:

chown wangjikui /home/elk/elasticsearch/elasticsearch-6.6.0 -R

然后再切换到 wangjikui  su  wangjikui 执行 ./elasticsearch命令即可启动

 

前台启动: bin目录下./elasticsearch

后台启动: bin目录下./elasticsearch -d  不打印启动日志 需到logs里看 类似于tomcat启动

关闭:Java程序 直接可以通过ps查找进程 也可通过端口查询进程

  1. Elasticsearch启动注意事项

Elasticsearch如果启动在127.0.0.1的话,可以启动成功

Elasticsearch如果要跨机器通讯,需要监听在真实网卡上

监听在真实网卡需要调整系统参数才能正常启动

  1. Elasticsearch监听在非127.0.0.1,
  2. 监听在0.0.0.0或者内网地址

以上两种监听都需要调整系统参数

 

如果是以上两种在没有调整系统参数的情况下会报以下三个错误:

ES启动三个报错的处理

[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]

[2]: max number of threads [3829] for user [elk] is too low, increase to at least [4096]

[3]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

解决方法:

针对第一个错误 调整系统参数的方法:在/etc/security/limits.conf文件中加入 配置

* - nofile 65536

针对第二种错误 调整参数的方法:在/etc/security/limits.d/20-nproc.conf 文件中加入 配置

 * - nproc 10240 (这个数值可根据报错提示最少线程数 而定)

针对第三个错误 调整系统参数 在etc/sysctl.conf中加入配置

vm.max_map_count = 262144

并执行写入命令:sysctl -p  后方可

注意:以上系统级别的操作都应该在root账号下完成

 

  1. 搭建Logstash 环境
  1. 首先确定JAVA环境暗转没问题 要求版本在JAVA8以上
  2. 下载二进制包 解压
  3. Logstash的JVM配置文件更新/usr/local/logstash-6.6.0/config/jvm.options

-Xms200M

-Xmx200M

Logstash支持

  1. 分为输入、输出
  • ES等
  1. 然后在/logstash-6.6.0/config/logstash-sample.conf进行日志输入输出配置 如下实例

 

 input {

  file {

    path => "/usr/local/nginx/logs/access.log"  (监听的日志文件全路径 监听的是启动之时及以后产生的日志)

  }

}

output {

  elasticsearch {

    hosts => ["http://192.168.118.133:9200"] (此是输出日志到elastisearch的请求路径)

  }

}

 

  1. 关于启动

当直接用bin目录下的./logstash 命令启动时 会报错(原因尚且不明 待调研)

用如下命令启动有效(属于前台启动 当关闭窗口时服务也会关闭)

   /home/elk/logstash/logstash-6.6.0/bin/logstash -f /home/elk/logstash/logstash-6.6.0/config/logstash-sample.conf

后台启动命令:

nohup /usr/local/logstash-6.6.0/bin/logstash -f /usr/local/logstash-6.6.0/config/logstash.conf >/tmp/logstash.log 2>/tmp/logstash.log &

 

完成以上的步骤:对于elk环境的搭建雏形已经完成 接下来需要对其不断的优化

 

  • 架构优化

 

  1. 优化ONE

 优化原因:由于Logstash 本身属于重量级架构 占资源较多 不适合在每一台客户机上都安装一次 所以 在这里集成Filebeat 收集日志后发给Logstash 做一些日志处理,如果只是单纯的收集日志 这里则不需要使用logstash 直接使用filebeat收集后发给Elasticsearch 再由Kibana进行数据展示即可。

本架构是通过filebeat收集日志发送给Logstash进行日志处理之后再发送给发给Elasticsearch 再由Kibana进行数据展示。

 

实现步骤:

  1. 下载filebeat 二进制安装包 解压即可
  2. 对配置文件进行修改filebeat-6.6.0/filebeat.yml

       将原先配置文件中的内容直接删除 加入如下配置即可:

 filebeat.inputs:

- type: log

    tail_files: true

    backoff: "1s"

    paths:

        - /usr/local/nginx/logs/access.log (注意:横杠与数据之间要留有一个空格 被坑过

output:

  logstash:

    hosts: ["192.168.118.132:5044"]

 

配置解释:paths  是服务器上日志文件的全路径

          Hosts  是logstash被监控的ip与端口

 

  

  1. 相对应的Logstash配置也要做相应的修改

对conf/logstash-sample.conf(也可能是logstash.conf)进行如下修改:

input中改成如下配置 供filebeat输入数据:

input {

  beats {

    host => '0.0.0.0'    允许外网访问

    port => 5044       监控的端口

  }

}

你可能感兴趣的:(ELK)