https://www.jianshu.com/p/88f2cbedcc2a

写在前面

刚毕业工作的时候,处理日志喜欢自己写脚本抓取数据分析日志,然后在zabbix上展示出来。但是开发要看日志的时候,还是要登录服务器,使用tailf、grep加一些正则,很是麻烦。来到一个新环境,需要搭建一套日志管理系统,接触了elk,相见恨晚,记录下自己从零开始学习使用elk的过程。

日志管理系统ELK

目录

  • 部署架构图
  • 部署版本
  • 部署地址
  • 服务部署
  • 总结

部署架构图:

 
elk.png

部署前了解:

1、elk现在又叫elfk,是elasticsearch、logstash、filebeat、kibana的简称。
2、elk架构类似于C/S,由客户端的日志收集工具收集日志,服务端的日志收集工具收集分析客户端的日志。之前客户端的日志收集工具logstash是用java写的,比较占用内存,为了不给生产环境造成负担,生产环境上的日志收集工具换成了用go语言写的filebeat,filebeat将日志收集到redis里面,利用redis做消息队列,服务端的logstash从redis里面取数据,分析,传到elasticsearch,最后用kibana展示出来
3、本次安装是安装在内网,故没有考虑到安全的问题,安装过程中会提到
4、本次安装是基于debian,如果是centos注意从官网下载不同的软件包、还要注意防火墙、selinux等问题。安装过程是大同小异的
5、本次安装时,日志量不算大,所以es用的是单机

部署版本:

filebeat:6.2.3
redis: 2.8.17
logstash:6.2.3
elasticsearch:6.2.3
kibana:6.2.3

部署地址:

服务 服务器地址 系统 部署目录
filebeat log debian8.9 /app/elk
redis elk debian8.9  
logstash elk debian8.9 /app/elk/logstash-6.2.3
elasticsearch elk debian8. 9 /app/elk/elasticsearch-6.2.3
kibana elk debian8. 9 /app/elk /kibana-6.2.3-linux-x86_64

服务部署:

1、redis:

考虑到logstash直接把日志丢给es,会导致es吃不消,故加了一个redis做队列缓存。也可以用kafka之类的,都是官网推荐,这里用redis,因为简单,而且做队列用,不占内存

redis直接安装就行
apt-get install redis-server
配置文件地址:/etc/redis/redis.conf

1、启动
service redis-server start
2、查看日志:
tailf /var/log/redis/redis-server.log
3、报警告:
WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
按照建议做,不然有可能导致数据丢失

4、报错:

[20109] 27 Mar 10:28:17.052 * Background saving started by pid 20760
[20760] 27 Mar 10:28:17.052 # Failed opening .rdb for saving: Permission denied

没有权限导致持久化失败
解决:
chmod 755 dump.rdb

5、关于安全建议:

  • redis内网通信
  • 修改默认端口号,开启账号密码登录
  • 打开防火墙,添加白名单

6、测试:
在需要收集日志的客户端telnet下redis加port,确保通信没问题

2、Elasticsearch

1、安装目录:
/app/elk/elasticsearch-6.2.3

2、安装依赖:
es是用java写的,所以需要安装jdk1.8,这里用oracle_jdk1.8,openjdk和其他版本的支持不支持elk6.2.3我不清楚
jdk1.8的安装:
2.1、下载jdk至指定目录 /usr/local
jdk1.8:http://download.oracle.com/otn-pub/java/jdk/8u162-b12/0da788060d494f5095bf8624735fa2f1/jdk-8u162-linux-x64.tar.gz

wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" -P /usr/local http://download.oracle.com/otn-pub/java/jdk/8u162-b12/0da788060d494f5095bf8624735fa2f1/jdk-8u162-linux-x64.tar.gz

2.2、解压
tar zxvf /usr/local/jdk-8u162-linux-x64.tar.gz -C /usr/local/

2.3、配置环境变量


export JAVA_HOME=/usr/local/jdk1.8.0_162
export JAVA_BIN=/usr/local/jdk1.8.0_162/bin
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jart

4、安装es:

cd /app/elk
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.3.deb
tar zxvf elasticsearch-6.2.3.tar.gz

配置文件:/app/elk/elasticsearch-6.2.3/config/elasticsearch.yml

ath.data: /app/elk/elasticsearch-6.2.3/data
path.logs: /app/elk/elasticsearch-6.2.3/logs
network.host: ip ####这里写es服务器的ip

5、创建elk账号
为了安全起见,es不支持以root用户启动,所以先创建elk账号

####debian创建账号,赋予sudo权限。其他linux发行版的命令可以自行google
adduser elk
groups elk
usermod -aG sudo elk
visudo
添加: elk ALL=(ALL) NOPASSWD: ALL chown -R elk.elk /app/elk

6、启动:
切换用户,启动。我这里图省事就直接nohup启动了。正规点的可以用screen、supervisor这些,别忘了加入开机自启动

su elk
nohup /app/elk/elasticsearch-6.2.3/bin/elasticsearch > /var/log/es.log 2>&1 &

7、查看nohup.out日志,检查报错
看有没有报错:如果报错,需要设置文件打开数和vm.max_map_count,那么就进行修改,

文件打开数:
vim /etc/security/limits.conf

root soft nofile 65535
root hard nofile 65535
* soft nofile 65536
* hard nofile 65535 elk soft nofile 655350
elk hard nofile 655350

jvm最大线程数:
sysctl -w vm.max_map_count=262144
其他错误请自行Google

8、启动成功:
查看es
ip和端口需要和配置文件保持一致
curl http://ip:9200

9、安全建议:

  • es加账号密码
  • 通信用tls

至此,单机版的es就算安装成功了。O(∩_∩)O

3、filebeat

1、安装机器:需要收集日志的机器
安装目录:/app/

debian安装:

cd /app/elk
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.2.3-amd64.deb
sudo dpkg -i filebeat-6.2.3-amd64.deb

2、配置文件:/etc/filebeat/filebeat.yml
配置:

####收集日志的位置,标签
filebeat.prospectors: - type: log enabled: true paths:
- /var/log/nginx/access.log
fields:
list: access.log ####配置文件模板地址,是否自动加载
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml reload.enabled: false setup.template.settings:
index.number_of_shards: 3 ####收集的日志输出到的地方,这里是用了redis的消息队列功能
output.redis:
hosts: ["ip"] ##redis ip
port: port ##redis port
key: "%{[fields.list]}" ##key值,这里用了变量,好归类不同的日志
db : 5 ##db库,自由选择

3、启动:
service filebeat start
4、检查:
启动后,可以进入redis的对应db里面,使用keys * 查看未消费的队列,如果没有消费完,那么应该能看到list值,这里是access.log。说明日志已经收集到redis缓存里面了。

4、logstash

logstash是收集处理日志用的,跟filebeat差不多,最大的区别是logstash自带graok解析、切割日志,而filebeat功能没这么强大,但是filebeat用go写,轻量,不占内存,故可以放到客户端收集日志,服务端还是用logstsh

1、目录:/app/elk/logstash

cd /app/elk/
wge https://artifacts.elastic.co/downloads/logstash/logstash-6.2.3.deb
tar zxvf logstash-6.2.3.tar.gz

2、logstash的配置文件:/app/elk/logstash-6.2.3/config/logstash.yml

path.data: /app/elk/logstash-6.2.3/data
path.logs: /app/elk/logstash-6.2.3/logs

3、日志收集的配置文件:/app/elk/logstash-6.2.3/conf/
分为三部分:

  • input:日志的来源,这里来源是之前收集缓存日志的redis
  • filter:日志切割,有没有这一块也能用,这是优化显示的日志用的
  • output:日志输出的地方,参考架构图,输出到es

这里贴出我的,略去了敏感字段

#--------------------------------This  is  input setting-----------------------------------------

input {
redis {
host => "ip"
type => "test.access.log"
data_type => "list"
key => "test.access.log"
port => "6379"
db => 5
} redis {
host => "ip"
type => "test.error.log"
data_type => "list"
key => "test.error.log"
port => "6379"
db => 5
} } #--------------------------------This is filter setting---------------------------------------- filter {
if [type] == "test.access.log"{ grok{ match => {"message" => "%{IP:clientip} - - \[%{HTTPDATE:timestamp}\] \"%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})\" %{NUMBER:response}" }
} geoip {
source => "clientip"
target => "geoip"
database => "/app/elk/logstash-6.2.3/etc/GeoLite2-City.mmdb"
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
} mutate {
convert => [ "[geoip][coordinates]", "float"]
}
}
} #-------------------------------This is output setting---------------------------------------
output { if [type] == "test.access.log"{ elasticsearch { hosts => ["ip:9200"] index => "test.access.log"} } if [type] == "test.error.log"{ elasticsearch { hosts => ["ip:9200"] index => "test.error.log"} } stdout { codec => rubydebug }
}

6、启动:nohup /app/elk/logstash-6.2.3/bin/logstash -f /app/elk/logstash-6.2.3/conf > /app/elk/logstash-6.2.3/nohup.out 2>&1 &

5、kibana

1、目录:/app/elk/kibana-6.2.3-linux-x86_64

cd /app/elk
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.4-linux-x86_64.tar.gz
tar zxvf kibana-6.2.3-linux-x86_64.tar.gz

2、配置文件:

server.port: port

server.host: ip

server.name: name

elasticsearch.url: "http://ip:9200"

tilemap.url: 'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}'

3、启动:nohup /app/elk/kibana-6.2.3-linux-x86_64/bin/kibana > /var/log/kibana.log 2>&1 &

4、检查:
打开 刚设置的 http://ip:port,就可以看到kibana界面了。

安全建议:
kibana没有账号登录的功能,需要依赖插件X-pack,但是x-pack 不是免费的,所以可以用nginx的auth登录

总结:

至此,elk就搭建完毕了,大家可以到kikana上建立索引,自由查看日志了

由于elk版本较多,网络上的教程质量也是参差不齐,大家搭建的时候,要以官方文档为准,配置文件的写法,也要以官方文档为准。然后启动前要测试,启动的时候要注意查看日志。

后续文档内容:kibana的使用、elk结合钉钉告警、logstash配置文件的写法

贴一个日志分析图,具体实现参考后续文档。

 
elk.png

作者:OrangeLoveMilan
链接:https://www.jianshu.com/p/88f2cbedcc2a
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

日志管理系统ELK6.2.3的更多相关文章

  1. 日志分析工具、日志管理系统、syslog分析

    日志分析工具.日志管理系统.syslog分析 系统日志(Syslog)管理是几乎所有企业的重要需求.系统管理员将syslog看作是解决网络上系统日志支持的系统和设备性能问题的关键资源.人们往往低估了对 ...

  2. Eventlog Analyzer日志管理系统、日志分析工具、日志服务器的功能及作用

    Eventlog Analyzer日志管理系统.日志分析工具.日志服务器的功能及作用 Eventlog Analyzer是用来分析和审计系统及事件日志的管理软件,能够对全网范围内的主机.服务器.网络设 ...

  3. 离线部署ELK+kafka日志管理系统【转】

    转自 离线部署ELK+kafka日志管理系统 - xiaoxiaozhou - 51CTO技术博客http://xiaoxiaozhou.blog.51cto.com/4681537/1854684 ...

  4. Centos7 之安装Logstash ELK stack 日志管理系统

    一.介绍 The Elastic Stack - 它不是一个软件,而是Elasticsearch,Logstash,Kibana 开源软件的集合,对外是作为一个日志管理系统的开源方案.它可以从任何来源 ...

  5. 170228、Linux操作系统安装ELK stack日志管理系统--(1)Logstash和Filebeat的安装与使用

    安装测试环境:Ubuntu 16.04.2 LTS 前言 (1)ELK是Elasticsearch,Logstash,Kibana 开源软件的集合,对外是作为一个日志管理系统的开源方案.它可以从任何来 ...

  6. CentOS 7下安装Logstash ELK Stack 日志管理系统(上)

    介绍 The Elastic Stack - 它不是一个软件,而是Elasticsearch,Logstash,Kibana 开源软件的集合,对外是作为一个日志管理系统的开源方案.它可以从任何来源,任 ...

  7. fluentd分布式日志管理系统

    如何有效地收集和管理大量服务器的日志一直是企业很头疼的一个问题,部分企业应用shell脚本来管理,部分企业基于hadoop来开发自己的日志管理系统,第一种管理成本巨大,需要大量的人力来维护脚本的正常运 ...

  8. lagstash + elasticsearch + kibana 3 + kafka 日志管理系统部署 02

    因公司数据安全和分析的需要,故调研了一下 GlusterFS + lagstash + elasticsearch + kibana 3 + redis 整合在一起的日志管理应用: 安装,配置过程,使 ...

  9. 基于Struts2 的日志管理系统的Java实现

    1.首先,项目的架构如下:          2.com.sxl.dba 中:OracleConnector.java package com.sxl.dba; import java.sql.*; ...

随机推荐

  1. 20145240 《Java程序设计》第四次实验报告

    20145240 <Java程序设计>第四次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.26 实验 ...

  2. 大话设计模式之PHP篇 - 观察者模式

    定义观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生改变时,会通知所有观察者对象,使他们能够自动更新自己. <?php /*主题类或称为通知类 ...

  3. BYTE、HANDEL、DWORD等的定义

    有时候引入第三方库之后,可能会存在标题的这些变量没有定义,原来这些变量都定义在windows.h里面,包含进去就行了(Qt的MSVC编译器)

  4. 项目打包部署到tomcat操作步骤

    对于项目部署到tomcat中,需进行一下步骤: 1.对于项目打war包,方式有以下几种:install一下   找到war包的路径即可 另外:在eclipse中,选中项目 1.1 选中Export 1 ...

  5. Excel下载打不开

    1.问题描述:今天遇到个问题,对于定时发送邮件,前两天还正常,今天发现邮件能收到,但打不开,显示如下错误: 预览邮件显示: 点击Excel打开,显示如下: 2.问题解决方案 删除对于服务器上部分空间内 ...

  6. 互联网高并发之Hystrix实现服务隔离和降级

    当大多数人在使用Tomcat时,多个HTTP服务会共享一个线程池,假设其中一个HTTP服务访问的数据库响应非常慢,这将造成服务响应时间延迟增加,大多数线程阻塞等待数据响应返回,导致整个Tomcat线程 ...

  7. PAT1027. Colors in Mars (20)

    #include <iostream> using namespace std; string tbl="0123456789ABC"; int main() { in ...

  8. JavaScript -- 控制table的创建 与 删除, 排序, 表格颜色

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. JavaWeb中的中文编码问题

    一.为什么要编码? 1.在计算机中存储信息的最小单元是1字节,即8个bit,所以能表示的字符范围是0~255个. 2.人类要表示的符号太多,无法用1个字节来完全表示. 这就是矛盾,要解决这个矛盾,就出 ...

  10. 本地磁盘文件夹共享到虚拟机上的linux系统中

    1. 将本地的一个文件夹设置为共享文件 2.点击 虚拟机菜单中的  虚拟机->设置->选项->共享文件夹->总是启用->添加(将上一步骤设置的共享文件夹添加到里面) 3. ...