转自:https://blog.csdn.net/enweitech/article/details/81744250

今天临时收到一个企业客户的项目需求,需要对所有WIndows业务服务器的日志进行集中化查看和分析管理,毕竟像业务很多的公司而且历史比较悠久的公司,windows和linux都是混合运行的,毕竟太老的程序和配置是不能轻易动的,尤其医院和政府类的。

在互联网项目中,良好的日志监控和分析能保障业务稳定运行,不过一般情况下日志都分散在各个生产服务器,且开发人员无法登陆生产服务器,这时候就需要一个集中式的日志收集装置,对日志中的关键字进行监控,触发异常时进行报警,协助开发人员查看相关日志。

好吧!话不扯远。直接进入项目正题。

项目需求:

收集和存储Windows AD服务器关键系统日志,应对安全审计要求。

基于Windows账户登录日志进行安全事件分析。

收集WIndows server服务器上各种应用软件和IIS等中间件的访问日志和错误日志进行分析和定位故障原因进行溯源。

日志类别分析:

日志主要包括系统日志、应用程序日志和安全日志。每条日志都记载着时间戳、主机名、使用者及操作行为等相关的描述,系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,及时分析问题、追查错误根源纠正错误。

通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。

在大数据时代,日志数量巨大,种类多样化,企业数据就如同一座亟待开发的金矿;日志的统计和检索的难度加大,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。

强大的ELK日志管理

ELK是一款开源的海量日志搜索分析平台,能够完美的解决我们上述的问题,对日志进行集中采集和实时索引,提供实时搜索、分析、可视化、报警等功能,帮助企业在统一平台实时管理日志数据,进行线上业务实时监控、异常原因定位、数据统计分析。ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成。官方网站: https://www.elastic.co/products

Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
    Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。
    Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

ELK+kafka日志系统原理(介质为日志)  Windows/linux的

logstash(客户端)--->kafka(队列)--->kakfa上的logstash(也是一个客户端)--->ES(存储)--->kibana(界面)

此次项目拓扑图(出于对客户隐私信息的保护暂时只画出简单图示)

Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser浏览器渲染。

由于 Filebeat 已经完全替代了 Logstash-Forwarder 成为新一代的日志采集器,同时鉴于它轻量、安全等特点,越来越多人开始使用它。因此项目需要详细讲解如何部署基于 Filebeat/Winlogbeat 的 ELK 集中式日志解决方案,具体架构见图 5。

图 5. 基于 Filebeat 的 ELK 集群架构

因为免费的 ELK 没有任何安全机制,所以这里使用了 Nginx 作反向代理,避免用户直接访问 Kibana 服务器。加上配置 Nginx 实现简单的用户认证,一定程度上提高安全性。另外,Nginx 本身具有负载均衡的作用,能够提高系统访问性能。

对于日志数据流特别大的情况,LogStash会造成拥堵,这个时候可以使用消息队列来进行缓冲。同时,日志一旦进过LogStash之后,会不方面一些流处理程序来读取。这个时候使用kafka就比较好了,因为kafka是将消息持久化在本地,流处理应用可以从消息的offset初始的地方来读取。加入kafka的后的流程如下:

image_1b4g8qjmjegcnf614pqe61kbf13.png-33.1kB
日志系统平台搭建信息

平台

笔者试验平台为 RHEL 6.9。注意,目前 ELK(包括 Beats)不支持 AIX。具体对平台的支持请查看这里。

JDK

JDK 是 IBM Java 8。ELK 需要 Oracle 1.7(或者是 OpenJDK 1.7) 及以上,如果是 IBM Java,则需要 8 及以上的版本。

具体信息。

浏览器

Kibana 4.x 不支持 IE9 及以下;Kibana 3.1 虽然支持 IE9,但是不支持 Safari(iOS)和 Chrome(Android)。具体对浏览器的支持,请看这里。

软件版本

Filebeat:1.2.3;
    Logstash:2.3.4;
    Elasticsearch:2.3.4;
    Kibana:4.5.4;
    Nginx:1.8.1。

注意事项

logstash版本:1.5.4(因不支持beats输入插件,故弃用),2.2.1或者更高的版本(目前使用版本)

由于ELK无论linux和windows运行都正常,建议生产环境使用linux系统

另外由于某些Windows Server服务器默认是禁止启用powershell的,因此安装过程可能会遇到如下问题。

无法加载文件 C:\Program Files\winlogbeat\install-service-winlogbeat.ps1,因为在此系统中禁止执行脚本。有关详细信息,请参阅 "get-help about_signing"。08以上是自带powershell的,而03则需要安装netframework之后才能安装powershell。

安装步骤

步骤一、下载Java组件并安装

下载最新版本的jdk,解压缩双击安装。备注:请务必使用java8以上的版本,否则ELK不能正常使用。

步骤二、添加JAVA_HOME 环境变量

右键“这台电脑“-〉属性-〉高级系统设置-〉环境变量,在系统变量里新建JAVA_HOME,值为C:\Java\jdk1.8.0_152,如下图所示

步骤三、安装配置nginx,为kibana配置反向代理

首先从网址http://nginx.org/download/nginx-1.9.4.zip下载nginx.

解压nginx-1.9.4.zip到f:\elk,目录更名为nginx.

修改f:\elk\nginx\conf\nginx.conf文件,增加如下内容

server{

listen       80;

server_name  localhost;

location / {

proxy_set_header Host $host;

proxy_pass http://localhost:5601;

}

这样做解决了5601端口被防火墙屏蔽,导致外部用户访问不了的问题。

步骤四、安装elasticsearch

解压elasticsearch-1.7.1.zip压缩包到F:\elk\elasticsearch地址下

打开命令行,输入如下命令

Pushd f:\elk\elasticsearch\bin\

Service install
产生如下输出

然后输入

service manager

出现如下界面

修改“Startup type “ ,从Manual到Automatic。
然后点击”Start“, elasticsearch将立即开始运行。

在浏览器中输入http://localhost:9200,出现如下界面,表明elasticsearch安装成功。

步骤五、安装head插件

解压elasticsearch-head-master.zip压缩包内容到elasticsearch\plugins文件夹下,修改elasticsearch-head-master名称为head,在浏览器中输入http://localhost:9200/_plugin/head/即可查看Elasticsearch中数据

步骤六、安装logstash

解压logstash-2.2.1.zip压缩包到F:\elk\logstash地址下

在f:\elk\logstash\bin里新建Logstash.conf

内容如下

input {
beats {
port => "5544"
codec => json {
charset => "UTF-8"
}
}
}
filter {
if [type] == "info" {
grok {
match => {
"message" => "(?<datetime>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d{3})\s+
(?<thread>.∗)
\s+(?<level>\w*)\s+(?<class>\S*)\s+
(?<method>§∗)
\s+\: (?<message>.*)\s*"
}
overwrite => ["message"]
}
}
if [type] == "error"{
grok {
match => {
"message" => "(?<datetime>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2},\d{3})\s+
(?<thread>.∗)
\s+(?<level>\w*)\s+(?<class>\S*)\s+
(?<method>§∗)

\s+\- (?<message>.*)\s*"
}
overwrite => ["message"]
}
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "test-%{+YYYY-MM}"
}
stdout { codec => rubydebug }
}

步骤七、新建Logstash 启动批处理文件

在文件夹f:\elk\logstash\bin下新建run.bat 文件

文件内容如下
logstash.bat agent -f logstash.conf

增加这个批处理的目的是为了解决在windows环境下logstash运行一段时间就会挂起的问题。

步骤八、将Logstash安装成windows服务
首先从网址https://nssm.cc/release/nssm-2.24.zip下载nssm。

解压nssm-2.24.zip,然后从解压目录中拷贝nssm-2.24\win64\nssm.exe到f:\elk\logstash\bin里,然后在命令行里输入

Pushd f:\elk\logstash\bin

接着执行

Nssm install logstash

出现安装界面

请填写如下信息:
Path: f:\elk\logstash\bin\run.bat
Startup directory: f:\elk\logstash\bin
界面如下:

点击"Details"页签,填写如下内容

Display name:logstash

Startup type:Automatic

界面如下:

接下来点击"Dependencies"页签,填写如下信息

This service depends on the followingsystem components: elasticsearch-service-x86

界面如下:

添加依赖的原因是,logstash的输出配置的是Elasticsearch,如果Elasticsearch没有启动,logstash无法正常工作。

最后单击install service按钮,执行安装过程,出现如下界面,表示服务已经安装成功。

步骤九、将Kibana安装成windows服务

将步骤八下载的nssm拷贝到文件夹f:\elk\kibana\bin下。

然后在命令行里输入

Pushd f:\elk\kibana\bin

接着执行

Nssm install kibana

出现安装界面

请填写如下信息:
Path: f:\elk\kibana\bin\kibana.bat
Startup directory: f:\elk\kibana\bin

界面如下:

类似步骤八

点击"Details"页签,填写如下内容

Display name:kibana

Startup type:Automatic

界面如下:

接下来点击"Dependencies"页签,填写如下信息

This service depends on the followingsystem components:

elasticsearch-service-x86

logstash

界面如下:

最后单击install service按钮,执行安装过程,出现如下界面,表示服务已经安装成功。

你可以在"f:\elk\kibana\config\kibana.yml"中修改kibana的运行端口。

步骤十、安装FileBeat

(一)、安装

1.将文件夹中filebeat-5.5.1-winsows-x86_64.zip压缩包(也可自行下载)解压到C:\filebeat文件夹

2.以管理员身份运行PowerShell(此处不要用cmd.exe),在控制台中输入以下命令安装

CD C:\filebeat

.\install-service-filebeat.ps1

3.安装过程中会出现以上错误,此时需更改执行策略,语句如下

Set-executionpolicy RemoteSigned

选择:y  执行完后重新执行安装命令

.\install-service-filebeat.ps1

至此安装成功,此时可看到filebeat服务为关闭状态

4.在开始菜单-运行输入Services.msc打开本地服务操作栏,找到filebeat.exe,启动服务

(二)、配置

1.打开C:\filebeat文件夹,找到filebeat.yml配置文件,打开

2.将以下内容替换到配置文件中,根据需要更改配置内容(注意,由于文件为yml格式,所以同一模块中的行列需对齐,否则无法读取该配置文件)

(三)、数据查看

重新启动服务,往配置文件所在的日志目录中插入数据,打开http://localhost:9200/_plugin/head/或http://localhost:5601即可查看新增的日志数据

█性能

在没有日志产生的情况下,winlogbeat进程工作内存9M,有日志产生的情况下,小于100M内存。

7

█维护

Windows Service维护

;启动服务

net start winlogbeat

;停止服务

net stop winlogbeat

;卸载服务

powershell "C:\Program Files\winlogbeat\uninstall-service-winlogbeat.ps1"

附录部分配置文件

编辑文件【winlogbeat.conf】,设置日志收集参数、转发服务器参数等。
    C:\Program Files\winlogbeat\winlogbeat.yml
    # The supported keys are name (required), tags, fields, fields_under_root,
    # forwarded, ignore_older, level, event_id, provider, and include_xml. Please
    # visit the documentation for the complete details of each option.
    # https://go.es.io/WinlogbeatConfig
    # 收集三类日志:Application/Security/System,72小时前的日志忽略。以下默认,无需修改
    winlogbeat.event_logs:
    - name: Application
    ignore_older: 72h
    - name: Security
    - name: System
    # 注释所有Elasticsearch相关的配置参数
    #-------------------------- Elasticsearch output ------------------------------
    #output.elasticsearch:
    # Array of hosts to connect to.
    #hosts: ["localhost:9200"]
    # Optional protocol and basic auth credentials.
    #protocol: "https"
    #username: "elastic"
    #password: "changeme"
    # 配置Logstash相关参数,默认只需要配置hosts
    #----------------------------- Logstash output --------------------------------
    output.logstash:
    # The Logstash hosts
    hosts: ["1.1.1.1:5044"]
    其中1.1.1.1时远程logstash服务器的IP地址,实际部署时请设置为正确的IP参数。
    请确保防火墙策略允许Windows AD服务器能够访问到logstash服务器IP的TCP5044端口。

【参考资料】

1、ELK+Filebeat 集中式日志解决方案详解 https://www.ibm.com/developerworks/cn/opensource/os-cn-elk-filebeat/index.html?ca=drs-&utm_source=tuicool&utm_medium=referral(讲解的很详细推荐阅读)

2、ELK+kafka日志系统搭建-实战 - CSDN博客 https://blog.csdn.net/wangdaoge/article/details/53130263

3、ELK日志管理平台 - CSDN博客 https://blog.csdn.net/polaris_1/article/details/54381502
---------------------  
作者:天府云创  
来源:CSDN  
原文:https://blog.csdn.net/enweitech/article/details/81744250  
版权声明:本文为博主原创文章,转载请附上博文链接!

ELK 方案的更多相关文章

  1. 你必须知道的容器日志 (2) 开源日志管理方案 ELK

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章.上一篇<你必须知道的容器日志(1)>中介绍了Docker自带的log ...

  2. ELK日志分析系统搭建

    之前一段时间由于版本迭代任务紧,组内代码质量不尽如人意.接二连三的被测试提醒后台错误之后, 我们决定搭建一个后台日志分析系统, 经过几个方案比较后,选择的相对更简单的ELK方案. ELK 是Elast ...

  3. GO开发:用go写个日志监控系统

    日志收集系统架构 1.项目背景 a. 每个系统都有日志,当系统出现问题时,需要通过日志解决问题 b. 当系统机器比较少时,登陆到服务器上查看即可满足 c. 当系统机器规模巨大,登陆到机器上查看几乎不现 ...

  4. spring aop实现日志收集

    概述 使用spring aop 来实现日志的统一收集功能 详细 代码下载:http://www.demodashi.com/demo/10185.html 使用spring aop 来实现日志的统一收 ...

  5. Nginx正则配置

    Nginx配置中Location的语法规则 location [ = | ~ | ~* | ^~ | !~ | !~* ] /uri/{ - } = 表示精确匹配 ~ 表示区分大小写正则匹配 ~* 表 ...

  6. 面试连环炮系列(二十一):你们的项目怎么使用kafka

    你们的项目怎么使用kafka? 我们采用kafka进行日志采集,准确点说是ELK方案,即elasticsearch + logstash + kibana + kafka.通过Spring AOP的方 ...

  7. 用logstash 作数据的聚合统计

    用logstash 作数据的聚合统计 以spark-streaming 处理消费数据,统计日志经spark sql存储在mysql中 日志写入方式为append val wordsDataFrame ...

  8. 全栈必备Log日志

    Log日志,不论对开发者自身,还是对软件系统乃至产品服务都是非常重要的事情.每个开发者都接触过日志,以至于每个人对日志的了解都会有所不同. 什么是日志 日志是什么呢?老码农看来,日志是带有明确时间标记 ...

  9. TKE 用户故事 - 作业帮 PB 级低成本日志检索服务

    作者 吕亚霖,2019年加入作业帮,作业帮架构研发负责人,在作业帮期间主导了云原生架构演进.推动实施容器化改造.服务治理.GO微服务框架.DevOps的落地实践. 莫仁鹏,2020年加入作业帮,作业帮 ...

随机推荐

  1. C#在dataGridView中遍历,寻找相同的数据并定位

      1. C#在dataGridView中遍历,寻找相同的数据并定位   [c-sharp] view plain copy int row = dataGridView1.Rows.Count;// ...

  2. mysql数据库binlog日志的异地备份

    MySQL数据库的二进制日志binlog记录了对数据库的全量DDL和DML操作,对数据库的point to point灾难恢复起着无法替代的关键作用.因此,基于此类考虑,需要对生产环境产生的binlo ...

  3. `Vue`中为什么访问不了以`$`和`_`开头的属性?

    Vue中为什么访问不了以$和_开头的属性? 背景:航班管家H5使用了Vue进行新版开发,预订流程逻辑copy参考了野鹅国际机票小程序,小程序中使用__开头的属性作为私有属性. 如题,在data中定义的 ...

  4. java中使用OpenOffice

    1. 下载软件/傻瓜安装 OpenOffice 下载地址http://www.openoffice.org/ JodConverter 下载地址http://sourceforge.net/proje ...

  5. 初识PHP之php运行流程及原理(一)

    初识PHP一.用脚本命令行运行php(1)打开cmd.exe(winkey+R)(2)找到php.exe(拖进cmd即可)(3)输入命令php.exe -f "文件实际路径"注:运 ...

  6. java 0 开始

    利用了61天的时间学习了 se 不过忘得也很多  .在这里开一个帖子   打算利用几天的时间进行复习,把凡是能用到的都放在这边. 不带图形界面的第一个项目已经弄完 (看视频加看书..而且自己往上面加东 ...

  7. 通过sessionStorage来根据屏幕宽度变化来加载不同的html页面

    因为项目需要,分别写了移动端和PC端的两个html页面,现在需要根据不同的屏幕宽度来加载对应的页面. 先说一下本人的思路-- 刚开始我直接在加载页面的时候判断屏幕宽度,然后加载相应的页面,大家是不是也 ...

  8. Storm系列三: Storm消息可靠性保障

    Storm系列三: Storm消息可靠性保障 在上一篇 Storm系列二: Storm拓扑设计 中我们已经设计了一个稍微复杂一点的拓扑. 而本篇就是在上一篇的基础上再做出一定的调整. 在这里先大概提一 ...

  9. Xcode 9 Analyzing Crash Reports

    Analyzing Crash Reports After you distribute your app for testing by using TestFlight or after you m ...

  10. Scala 中的foreach和map方法比较

    Scala中的集合对象都有foreach和map两个方法.两个方法的共同点在于:都是用于遍历集合对象,并对每一项执行指定的方法.而两者的差异在于:foreach无返回值(准确说返回void),map返 ...