前言:

ELK Stack 是 Elasticsearch、Logstash、Kibana 三个开源软件的组合。ELK Stac可以用于实时日志处理,数据分析等领域,目前了解该领域应该是开源界的第一选择。实践中,可跟对具体使用场景选择不同的软件组合,如下是快速安装部署,同样也适合生产环境。

实践环境

名称
版本 备注
OS centos6.4以上 7.x未测试,5.x不适用
Elasticsearch
2.4.0以上 适用JDK8.x,采用最新稳定版
Logstash 2.4.0以上
同上
Kibana 4.6.1以上
同上


各种包的资源准备好,可以去官网下载(www.elasticsearch.co),或者去国内的大型源里面,比如阿里源,清华源等等,这里就不详细说明了

由于这里下载的都是rpm包,安装很简单,JDK的安装配置也不说明了,这个大家应该都没什么问题了

  1. 安装配置elasticsearch

    rpm -ivh ela*.rpm

  2. 安装插件

    /usr/share/elasticsearch/bin/plugin install mobz/elasticsearch-head

  3. 添加系统服务并启动

    chkconfig --add elasticsearch && /etc/inin.d/elasticsearch start

  4. 修改一下配置文件中的network参数,可以让其绑定在每个网卡设备上

  5. 测试

    curl 'http://172.16.200.108:9200/?pretty'

  6. #自定义配置文件(/etc/elasticsearch/elasticsearch.yml)

    #组播组播自动发现配置

    cluster.name: my-test (集群名称,组播自动发现)

    node.name: node-01

    node.master: true

    node.data:true

    index.number_of_shards: 5 (默认分片数)

    index.number_of_replicas: 1 (默认分片副本)

    path.conf:/path/to/conf (配置文件目录)

    path.data:/usr/local/ver01/elasticsearch/data (数据存储目录)

    path.work:/ (临时文件目录)

    path.logs:/usr/local/ver01/elasticsearch/logs (日志文件目录)

    path.plugins:/ (插件目录)

    bootstrap.mlockall:true (锁住内存,不交换内存数据到swap上)

    network.host:0.0.0.0

    #集群单播配置

    cluster.name: mytest

    node.name: "node-01"

    node.data: true

    bootstrap.mlockall: true

    network.host: 172.16.200.108

    network.publish_host: 172.16.200.108

    discovery.zen.ping.multicast.enabled: false

    discovery.zen.ping.unicast.hosts: ["172.16.200.108","172.16.200.109"]



  1. 安装logstach

    rpm -ivh log*.rpm

  2. 相关配置文件,管理脚本

    #logstash配置文件默认存放目录

    /etc/logstash/conf.d

    #logstash bin文件

    /opt/logstash/bin/logstash

    #logstash管理脚本

    /etc/init.d/logstash start #start/stop/restart

    #测试配置文件

    /opt/logstash/bin/logstash agent -f /etc/logstash/conf.d/logstash.conf -t

  3. 一个简单收集Nginx访问日志的配置文件


    input {

    file {

    type => "Nginx-messages"

    path => ["/home/wwwlogs/access.log"]

    start_position => "beginning"

    }

    }

    output {

    if [type] == "Nginx-messages" {

    elasticsearch {

    hosts => ["172.16.200.108:9200"]

    index => "Nginx-messages-%{+YYYY-MM}"

    }

    }

    }


  1. 安装kibana

    rpm -ivh kibana*.rpm

  2. 相关配置

    #修改配置文件指定elasticsearch服务器地址:例如

    vim /opt/kibana/config/kibana.yml

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

    server.host: "172.16.200.108"

    #启动

    /etc/init.d/kibana start

    #默认访问地址:http://172.16.200.108:5601


### 注意以上用rpm包安装的配置文件,数据目录的默认配置,需要请修改 ###


安装配置无误的话,可以登录http://172.16.200.108:5601访问玩一下了


针对目前elk中前端展现的kiabna来说,权限的划分对企业用户使用非常不方便,虽然可以简单的方法加上基本密码认证(HTTP Auth Basic),但是要细分权限就有点坑了。kibana优势不用说,展现及统计都十分强大,所以两者各有千秋,本次主题所说的grafana替换kibana只是部分替换。我们这里2两者可以并用,将grafana提供给运营及开发等人群查看,给予相关分组及查看权限,而对于运维或者数据挖掘等等真正对这些日志进行的分析我们可以使用kibana。实践如下:


依然选择单机操作,所有的安装均在172.16.200.108上


  1. 安装grafana(2.6.0)

    yum install https://grafanarel.s3.amazonaws.com/builds/grafana-2.6.0-1.x86_64.rpm

  2. 配置文件

    /etc/grafana/grafana.ini

    #默认数据库sqlite3,默认服务端口3000,等等

  3. 启动脚本

    /etc/init.d/grafana-server

  4. 添加Elasticsearch数据源

  5. * 登录成功后,Data Sources => Add new

    关键说明:
    Type : 选择elasticsearch类型
    url : elasticsearch 的地址
    access : proxy 本实例选用该选项
    index name : elasticsearch中存储数据的的索引名
    如下所示:

    grafana

    添加完成后可 Test connection 测试,如果如下图所示则数据源可正常获取数据

    grafana

    创建一个日志相关统计的图形


    默认的组织,选择 New,添加一个dashboard(如下图),我们这里简单翻译为仪表盘。仪表盘中可以自定义自己需要的相关信息.

    grafana

创建的新仪表盘会看到一个绿色的条,点击可以做相关动作,另外设置里面可以另存为一个具体的名字保持仪表盘.如下:

grafana

绿色条展开后有许多选项,如下:

grafana

我们点击上面的Graph创建一个图形,然后如下,做相关参数调整
General => Title 定义图形名称,如下:

grafana


Metrics => Query 可以输入相关查询条件(lunece 语法),右下角的Nginx红框代表当前数据源是之前定义的数据源名称

grafana


Axes & Grid => Legend 是否显示,及显示的位置
Axes & Grid => Values 对应是否显示相关值,如下:

grafana

创建一个可查看相关详细日志的表格


我们点击绿色条,然后”Add Pannel”=>”Table”,然后如下,做相关参数调整,如下:

grafana


grafana


grafana

grafana相关用户及权限功能展示

grafana用户的功能是比较丰富的,这里简单展示下,可仔细查看下/etc/grafana/grafana.ini 配置文件中更多对用户这块的控制与定制.

grafana


grafana


grafana

kibana地图显示

思路

这里用最简单的思路实现,如下(Nginx中client IP):

  • logstash

    input:通过制定文件采集(这里采集的Nginx源日志已经设置为json格式了)
    filter:通过geoip插件指定字段client
    output:把日志导出到elasticsearch(这里重点注意,index名字如果在你没指定自定义模板之前,必须用”logstash-“开头,不理解没关系,按照我的例子操作一遍先实现即可)

  • kibana

    先在Settings中创建好对应的index
    然后在discover中查看对应index是否有采集到相关数据,数据采集是否正确
    再就是Visualize中Title map功能就可以查看相关client IP在地图中的显示及访问统计

实践

  • logstash配置文件

input {

file {

type => "Nginx-access"

path => ["/logs/Nginx/access.log"]

}

}

filter {

json {

source => "message"

}

geoip {

source => "client"

}

}

output {

elasticsearch {

hosts => ["10.154.19.58:9200"]

index => "logstash-Nginx-access-%{+YYYY.MM}"

}

}

  • kibana操作

    先在Settings中创建好对应的index

kibana-titlemap



然后在discover中查看对应index是否有采集到相关数据,数据采集是否正确

kibana-titlemapdiscover.png">


再就是Visualize中Title map功能就可以查看相关client IP在地图中的显示及访问统计

kibana-titlemap


kibana-titlemap


kibana-titlemap


kibana-titlemap


kibana-titlemap


日志统计分析--filebeat

Filebeat 是elastic官方Beats系列之一,用来采集文件日志推荐实践工具。采用当前流行高效率go语言开发,客户端采集日志无需安装jdk。

filebeat+logstash+elasticsearch+kibana

  • 看下官网的示意图,图中我们暂时只使用Beats家族之一filebeat

    elk-beats

filebeat:客户端采集文件日志信息,然后output给logstash,这里可以做负载
logstash:通过beat插件收集filebeat发过来的日志,如果需要可以过滤一些规则,然后indexer到elasticsearch
elasticsearch:保存及搜索日志
kibana:前端交互及展现

相关安装说明

1:安装filebeat、curl -L -O https://download.elastic.co/beats/filebeat/filebeat-1.1.1-x86_64.rpm

sudo rpm -vi filebeat-1.1.1-x86_64.rpm

2:安装logstash

参照上面的安装


3:安装logstash-input-beats插件

/opt/logstash/bin/plugin install logstash-input-beats

配置实例

filebeat:(/etc/filebeat/filebeat.yml)

  • 这里收集3种文件日志,定义了三种文档类型,方便在logstash索引时根据不同文档应用不通过滤规则

  • 其中Nginx-access日志源是json格式

  • output 可以启用负载均衡

  • shipper 可以定义name tags等等


filebeat:

prospectors:

-

document_type: "messages"

paths:

- /var/log/messages

-

document_type: "PHP-error-5"

paths:

- /home/wwwroot/PHP_error/PHP.log


-

document_type: "Nginx-access"

scan_frequency: "10s"

backoff: "1s"

paths:

- "/usr/local/ver01/Nginx/logs/*json.log"


registry_file: /var/lib/filebeat/registry


output:

logstash:

hosts: ["172.31.27.253:5044","172.31.17.40:5044"]

worker: 4

compression_level: 3

loadbalance: true


shipper:

name: test-web-01

tags: ["web-server","Nginx"]


启动filebeat

/etc/init.d/filebeat start

logstash:(/etc/logstash/conf.d/index.conf)

  • index.conf文件名可自取,以.conf后缀结尾即可

  • filter 过滤了Nginx-access 这种json格式日志,并加入了geoip插件将其客户端IP生成详细的ip位置信息

  • filter 过滤了PHP-error-5 PHPerror日志,并切分好字段

  • output 根据不通类型文档输入到不同的es索引中

input {

beats {

port => 5044

}

}

filter {

if [type] == "Nginx-access" {

json {

source => "message"

}

mutate {

remove_field => [ "message" ]

}

geoip {

source => "client"

}

}

if [type] == "PHP-error-5" {

grok {

break_on_match => false

match => [ "message",[

"\[%{MONTHDAY:day}-%{MONTH:month}-%{YEAR:year} %{TIME:time}\] PHP %{DATA:level}\: %{GREEDYDATA:error}"

]

]

add_field => { "timestamp" => "%{day}-%{month}-%{year} %{time}" }

remove_field => [ "day","month","year","time" ]

}

date {

match => [ "timestamp","yyyy-MM-dd HH:mm:ss","dd-MMM-yyyy HH:mm:ss" ]

}

mutate {

remove_field => [ "tags","offset","timestamp" ]

}

}

}


output {

if [type] == "messages" {

elasticsearch {

hosts => ["10.154.19.58:9200"]

index => "logstash-messages-%{+YYYY.MM}"

}

}

if [type] == "Nginx-access" {

elasticsearch {

hosts => ["10.154.19.58:9200"]

index => "logstash-Nginx-access-%{+YYYY.MM}"

}

}

if [type] == "PHP-error-5" {

elasticsearch {

hosts => ["10.154.19.58:9200"]

index => "logstash-PHP-error-%{+YYYY.MM}"

}

}

#stdout { codec => rubydebug }

}

测试配置文件:

/opt/logstash/bin/logstash agent -f /etc/logstash/conf.d/index.conf -t

启动logstach:

/etc/init.d/logstash start

centos6安装部署ELK以及后续操作的更多相关文章

  1. Elasticsearch属性单词常用解析说明

    这篇文章主要介绍了Elasticsearch属性单词常用解析说明,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

  2. Vue项目打包并部署nginx服务器的详细步骤

    vue项目开发好之后需要部署到服务器上进行外网访问,下面这篇文章主要给大家介绍了关于Vue项目打包并部署nginx服务器的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

  3. Java操作Elasticsearch rest-high-level-client 的基本使用

    这篇文章主要介绍了Java操作Elasticsearch rest-high-level-client 的基本使用,本篇主要讲解一下 rest-high-level-client 去操作 Elasticsearch的方法,结合实例代码给大家详细讲解,需要的朋友可以参考下

  4. ubuntu中利用nginx部署vue项目的完整步骤

    Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行,下面这篇文章主要给大家介绍了关于ubuntu中利用nginx部署vue项目的相关资料,需要的朋友可以参考下

  5. 使用Node.js配合Nginx实现高负载网络

    这篇文章主要介绍了使用Node.js配合Nginx实现高负载网络,Node的异步加上Nginx的反向代理在性能上实在是给力!需要的朋友可以参考下

  6. Elasticsearch插件及nodejs的安装配置

    这篇文章主要为大家介绍了Elasticsearch插件及nodejs的安装配置,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  7. SpringBoot+Elasticsearch实现数据搜索的方法详解

    Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。本文将利用SpringBoot整合Elasticsearch实现海量级数据搜索,需要的可以参考一下

  8. CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)

    这篇文章主要介绍了CentOS 7.2 mini版本下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

  9. PHP中使用ElasticSearch最新实例讲解

    这篇文章主要介绍了PHP中使用ElasticSearch最新实例讲解,这篇文章的教程是比较详细,有需要的同学可以研究下

  10. Laravel使用scout集成elasticsearch做全文搜索的实现方法

    这篇文章主要介绍了Laravel使用scout集成elasticsearch做全文搜索的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部