ELK实战搭建+http访问安全认证

阅读目录:

ELK日志平台入门简介
1.1 ELK原理拓扑图
1.2 Elasticsearch安装配置
1.3 Elasticsearch插件安装
1.4 Kibana安装配置
1.5 Logstash安装配置
1.6 ELK收集简单日志
1.7 ELK-WEB数据展示
1.8 Redis服务数据存储
1.9 ELK收集MYSQL日志
1.10 ELK收集内核日志
1.11 ELK收集Nginx日志
1.12 ELK收集Tomcat日志
1.13 Kibana批量日志收集
1.14 Kibana安全认证

 

ELK日志平台入门简介

作为运维工程师,我们每天需要对服务器进行故障排除,那么最先能帮助我们定位问题的就是查看服务器日志,通过日志可以快速的定位问题。

目前我们说的日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常需要分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。而且日志被分散的储存不同的设备上。

如果你管理数上百台服务器,我们登录到每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。

集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用find、grep、awk和wc等Linux命令能实现检索和统计,但是对于要求更高的查询、排序和统计等要求和庞大的机器数量依然使用这样的方法难免有点力不从心。

今天给大家分享的开源实时日志分析ELK平台能够完美的解决我们上述的问题,ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成。

ELK=elasticsearch+Logstash+kibana 

1) Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等ELK官网:https://www.elastic.co/

2) Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。

3) Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

4) Logstash和Elasticsearch是用Java语言编写,Kibana使用node.js框架,在配置ELK环境要保证系统有JAVA JDK开发库哦。

5) ELK架构为数据分布式存储、可视化查询和日志解析创建了一个功能强大的管理链。 三者相互配合,取长补短,共同完成分布式大数据处理工作。

1.1  ELK原理拓扑图

今天带大家一起来学习EKL企业分布式实时日志平台的构建.

 

1) ELK工作流程

通过logstash收集客户端APP的日志数据,将所有的日志过滤出来,存入Elasticsearch 搜索引擎里,然后通过Kibana GUI在WEB前端展示给用户,用户需要可以进行查看指定的日志内容。

同时也可以加入redis通信队列:

图一:

 

2) 加入Redis队列后工作流程

Logstash包含Index和Agent(shipper) ,Agent负责客户端监控和过滤日志,而Index负责收集日志并将日志交给ElasticSearch,ElasticSearch将日志存储本地,建立索引、提供搜索,kibana可以从ES集群中获取想要的日志信息。

1.2  Elasticsearch安装配置

安装ELK之前,需要先安装JDK (Java Development Kit) 是 Java 语言的软件开发工具包(SDK)),这里选择jdk-6u18-linux-x64-rpm.bin,bin文件安装跟sh文件方法一样,sh ./ jdk-6u18-linux-x64-rpm.bin,回车即可,默认安装到/usr/java/jdk1.6.0_18目录下。

配置java环境变量,vi /etc/profile 添加如下语句:

export JAVA_HOME=/usr/java/jdk1.6.0_18

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

source    /etc/profile    //使环境变量立刻生效。  

java    -version         //查看java版本,显示版本为1.6.0_18,证明安装成功。

分别下载ELK软件包:

wget   https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.0.tar.gz 

wget   https://artifacts.elastic.co/downloads/logstash/logstash-5.3.0.tar.gz 

wget   https://artifacts.elastic.co/downloads/kibana/kibana-5.3.0-linux-x86_64.tar.gz 

1) ELK安装信息

192.168.111.128  Elasticsearch

192.168.111.129  Kibana

192.168.111.130  Logstash

2) 192.168.111.128上安装ES

安装JDK版本信息,

tar xzf jdk-8u121-linux-x64.tar.gz

mkdir -p /usr/java/ ;mv jdk1.8.0_121/  /usr/java/

同时在/etc/profile末尾加入如下三行:

export JAVA_HOME=/usr/java/jdk1.8.0_121

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

3) 下载ES并配置

tar xzf elasticsearch-2.4.0.tar.gz

mv elasticsearch-2.4.0 /usr/local/elasticsearch/

 

修改vim /usr/local/elasticsearch/config/elasticsearch.yml文件

设置监听地址为network.hosts:0.0.0.0

 

useradd  elk

chown -R  elk:elk  /usr/local/elasticsearch/logs/

su - elk

/usr/local/elasticsearch/bin/elasticsearch -d

启动后如下图:

 

至此ES配置完毕,如果想配置ES集群模式,同样也非常简单,只需要拷贝 ES副本集即可,然后修改相应的参数。

1.3  Elasticsearch插件安装

安装ES HEAD插件。

cd /usr/local/elasticsearch;./bin/plugin install mobz/elasticsearch-head

 

http://192.168.111.128:9200/_plugin/head/ 

 

Elasticsearch-head是elasticsearch的集群管理工具,它是完全由HTML5编写的独立网页程序,你可以通过插件把它安装到ES,然后重启ES,通过界面访问和管理即可。

1.4  Kibana安装配置

安装kibana不需要安装JAVA JDK环境,直接下载源码,解压即可。

tar  -xzf  kibana-4.5.4-linux-x64.tar.gz

mv  kibana-4.5.4-linux-x64  /usr/local/kibana/

修改kibana配置文件信息,设置ES地址:

vim /usr/local/kibana/config/kibana.yml

 

1.5  Logstash安装配置

安装JDK版本信息,

tar xzf jdk-8u121-linux-x64.tar.gz

mkdir -p /usr/java/ ;mv jdk1.8.0_121/  /usr/java/

同时在/etc/profile末尾加入如下三行:

export JAVA_HOME=/usr/java/jdk1.8.0_121

export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

然后解压logstash:

tar  xzf  logstash-5.3.0.tar.gz

mv logstash-5.3.0 /usr/local/logstash/

1.6  ELK收集简单日志

进入目录cd /usr/local/logstash/config/etc/ (如果没有etc请创建)

创建ELK整合配置文件:vim  logstash.conf,内容如下:

input {

 stdin { }

}

output {

 stdout {

 codec => rubydebug {}

}

 elasticsearch {

 hosts => "192.168.111.128" }

}

 

4) 启动logstash服务

/usr/local/logstash/bin/logstash  -f  logstash.conf

 

1.7  ELK-WEB数据展示

logstash启动窗口中输入任意信息,会自动输出相应格式日志信息:

 

浏览器输入:http://192.168.111.129:5601/ 

 

为了使用kibana 你必须配置至少一个索引模式,索引模式是用于确认Elasticsearch  index,用来运行搜索和分析,也可以用于配置字段。

Index contains time-based events   索引基于时间的事件  

Use event times to create index names [DEPRECATED]  使用事件时间来创建索引名字【过时

Index  name  or  pattern  索引名字或者模式  

模式允许你定义动态的索引名字 使用*作为通配符,例如默认:

logstash-*  

选择:  

Time  field  name  

然后点击Discover,可以搜索和浏览 Elasticsearch 中的数据,默认搜索的是最近 15分钟的数据。可以自定义选择时间。

 

1.8  Redis服务数据存储

 

wget   http://download.redis.io/releases/redis-2.8.13.tar.gz

tar     zxf redis-2.8.13.tar.gz

cd redis-2.8.13

make   PREFIX=/usr/local/redis  install

cp      redis.conf     /usr/local/redis/

/usr/local/redis/bin/目录加入至环境变量配置文件/etc/profile末尾,然后Shell终端执行source /etc/profile让环境变量生效。

export PATH=/usr/local/redis/bin:$PATH

Nohup后台启动及停止Redis服务命令:

nohup /usr/local/redis/bin/redis-server  /usr/local/redis/redis.conf  &

/usr/local/redis/bin/redis-cli  -p  6379 shutdown

1.9  ELK收集MYSQL日志

目录/usr/local/logstash/config/etc/:

1) 日志采集-存入Redis缓存数据库;

agent.conf文件内容:

input {

   file {

       type => "mysql-access"

  start_position => "end"

       path => "/var/log/mysqld.log"

   }

}

output {

    redis {

        host => "localhost"

        port => 6379

        data_type => "list"

        key => "mysql"

    }

}

然后启动Agent:

../bin/logstash  -f  agent.conf

 

2) Redis数据-存入ES;

index.conf文件内容:

input {

  redis {

    host => "localhost"  #redis地址  

    port => "6379"    #redis端口号

    data_type => "list"  #logstash redis插件工作方式

    key => "mysql"  #监听的键值

 type => "redis-input"  #输出日志属于那个类型

 db => 0   #redis数据库的编号,一般是16个,默认登录后是0,可以通过命令选择。如果应用系统选择使用了不同的数据库,通过配置这个参数从指定的数据库中读取信息。

 threads => 1   #启用线程数量,启用线程数越多效率也快

    batch_count => 1    #返回的事件数量,此属性仅在list模式下起作用。

  }

}

output {

  if [type] == "redis-input" {

    elasticsearch {

      hosts => "192.168.111.128"

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

  }

}

}

然后启动index:

../bin/logstash  -f  index.conf

 

查看启动进程:

 

1.10  ELK收集内核日志

 

目录/usr/local/logstash/config/etc/:

1) 日志采集-存入Redis缓存数据库;

agent.conf文件内容:

input {

   file {

       type => "kernel-message"

  start_position => "end"

       path => "/var/log/messages"

   }

}

output {

    redis {

        host => "localhost"

        port => 6379

        data_type => "list"

        key => "kernel"

    }

}

然后启动Agent:

../bin/logstash  -f  agent.conf

 

2) Redis数据-存入ES;

index.conf文件内容:

input {

  redis {

    host => "localhost"

    port => "6379"

    data_type => "list"

    key => "kernel"

 type => "redis-input"

 db => 0 

 threads => 1

    batch_count => 1

  }

}

output {

if [type] == "redis-input" {

    elasticsearch {

      hosts => "192.168.111.128"

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

  }

  }

}

然后启动index:

../bin/logstash  -f  index.conf

 

查看启动进程:

 

1.11  ELK收集Nginx日志

目录/usr/local/logstash/config/etc/:

3) 日志采集-存入Redis缓存数据库;

agent.conf文件内容:

input {

   file {

       type => "nginx-access"

  start_position => "end"

       path => "/usr/local/nginx/logs/access.log"

   }

}

output {

    redis {

        host => "localhost"

        port => 6379

        data_type => "list"

        key => "nginx"

    }

}

然后启动Agent:

../bin/logstash  -f  agent.conf

 

4) Redis数据-存入ES;

index.conf文件内容:

input {

  redis {

    host => "localhost"

    port => "6379"

    data_type => "list"

    key => "nginx"

 type => "redis-input"

 db => 0 

 threads => 1

    batch_count => 1

  }

}

output {

if [type] == "redis-input" {

    elasticsearch {

      hosts => "192.168.111.128"

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

  }

  }

}

然后启动index:

../bin/logstash  -f  index.conf

 

查看启动进程:

浏览器访问kibana-WEB:

http://192.168.149.129:5601

 

 

 

 

 

1.12  ELK收集Tomcat日志

目录/usr/local/logstash/config/etc/:

5) 日志采集-存入Redis缓存数据库;

agent.conf文件内容:

input {

   file {

       type => "tomcat-access"

  start_position => "end"

       path => "/usr/local/tomcat/logs/catalina.out"

   }

}

output {

    redis {

        host => "localhost"

        port => 6379

        data_type => "list"

        key => "tomcat"

    }

}

然后启动Agent:

../bin/logstash  -f  agent.conf

 

6) Redis数据-存入ES;

index.conf文件内容:

input {

  redis {

    host => "localhost"

    port => "6379"

    data_type => "list"

    key => "tomcat"

 type => "redis-input"

 db => 0 

 threads => 1

    batch_count => 1

  }

}

output {

if [type] == "redis-input" {

    elasticsearch {

      hosts => "192.168.111.128"

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

  }

  }

}

然后启动index:

../bin/logstash  -f  index.conf

 

查看启动进程:

 

 

 

 

 

 

1.13  Kibana批量日志收集

如上配置可以正常收集单台服务器的日志,如何批量收集其他服务器的日志信息呢,方法步骤是什么呢?

可以基于SHELL脚本将配置完毕的logstash文件夹同步至其他服务器,或者通过ansible、saltstack服务器均可。

例如收集Nginx日志,index.conf和agent.conf内容保持不变即可:

配置文件目录:/usr/local/logstash/config/etc/,需修改配置文件原Redis服务器localhost为Redis服务器的IP即可;

1) 日志采集-存入Redis缓存数据库;

agent.conf文件内容:

input {

   file {

       type => "nginx-access"

  start_position => "end"

       path => "/usr/local/nginx/logs/access.log"

   }

}

output {

    redis {

        host => "localhost"

        port => 6379

        data_type => "list"

        key => "nginx"

    }

}

然后启动Agent:

../bin/logstash  -f  agent.conf

 

2) Redis数据-存入ES;

index.conf文件内容:

input {

  redis {

    host => "localhost"

    port => "6379"

    data_type => "list"

    key => "nginx"

 type => "redis-input"

 db => 0 

 threads => 1

    batch_count => 1

  }

}

output {

if [type] == "redis-input" {

    elasticsearch {

      hosts => "192.168.111.128"

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

  }

  }

}

然后启动index:

../bin/logstash  -f  index.conf

 

查看启动进程:

 

 

1.14  Kibana安全认证

当我们安装完ES、Kibana启动进程,可以直接在浏览器访问,这样不利于数据安全,接下来我们利用Apache的密码认证进行安全配置。通过访问Nginx转发只ES和kibana服务器。

Kibana服务器安装Nginx:

yum install pcre-devel pcre -y

wget -c http://nginx.org/download/nginx-1.12.0.tar.gz 

tar -xzf nginx-1.12.0.tar.gz

useradd www ;./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

make

make install

修改Nginx.conf配置文件代码如下:

worker_processes  1;

events {

    worker_connections  1024;

}

http {

    include       mime.types;

    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    upstream  jvm_web1 {

    server    127.0.0.1:5601  weight=1  max_fails=2  fail_timeout=30s;

}

    server {

        listen  80;

        server_name  localhost;

        location / {

         proxy_set_header  Host  $host;

         proxy_set_header  X-Real-IP  $remote_addr;

         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

         proxy_pass http://jvm_web1;

        }

    }

}

修改kibana配置文件监听IP为127.0.0.1:

 

重启kibana和Nginx服务,通过Nginx 80端口访问如下:

 

添加Nginx权限认证:

Nginx.conf配置文件location /中加入如下代码:

auth_basic "ELK Kibana Monitor Center";

auth_basic_user_file /usr/local/nginx/html/.htpasswd;

通过Apache加密工具htpasswd生成用户名和密码:

htpasswd -c /usr/local/nginx/html/.htpasswd admin

 

重启Nginx web服务,访问如下:

 

 

用户名和密码正确,即可登录成功,如下图所示:

 

 

 

 

转载于:https://www.cnblogs.com/zhangan/p/10861191.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值