1. 首页
  2. DevOps

ELK日志分析系统

一、ELK软件概念和工作原理

ELK不是一款软件,是由三款软件组成的:ElasticSearch、Logstash、Kibana,对外开源、免费的;

ElasticSearch是基于JAVA语言编写的,开源、免费的,用于数据存储,可以作为分布式搜索引擎来使用,可以实现数据内容存储、检索、排序、查询、报表统计、生成等功能;

Logstash是基于JAVA语言开发的,开源、免费的,用于客户端服务器采集本地日志内容的,Agent客户端软件,可以采集客户端服务器的各种日志内容:内核日志、系统日志、安全日志、应用程序(Apache、Nginx、MYSQL、Redis、Tomcat)日志等,除了采集日志之外,还可以对日志进行内容过滤或者匹配,并且将日志内容存储到ES服务器;

Kibana是Node.js框架语言编写的,开源、免费的,主要是用于展示Logstash和ES的日志数据的,可以提供一套WEB UI界面,方便用户和管理人员对ES的数据进行可视化操作、配置、数据分析、统计(如果没有WEB界面,只能靠命令行操作);

ELK工作方式&工作原理

客户端安装Logstash日志收集工具,通过logstash收集客户端的日志数据,将所有的日志过滤出来,存入服务端Elasticsearch 搜索引擎里,服务端的kibana会读取存储在ES中的日志内容,通过Kibana在WEB前端展示指定的日志内容。同时也可以加入redis通信队列,加速日志访问。

二、部署ELK

环境:

172.20.10.10  客户端logstash

172.20.10.11  服务端elasticsearch  kibana

172.20.10.12  redis服务器

关闭防火墙 selinux 安装JDK1.8

官网下载elk软件包:https://www.elastic.co/cn/downloads/past-releases

也可访问个人网站下载本次部署对应软件包: https://www.wzstyle.cn/?p=427

下载jdk

https://www.oracle.com/java/technologies/oracle-java-archive-downloads.html

jdk配置方法:

tar zxf jdk-8u171-linux-x64.tar.gz

vim /etc/profile 加入:

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

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

  • 部署:elasticsearch

tar zxf elasticsearch-5.3.0.tar.gz

mv elasticsearch-5.3.0  /usr/local/elasticsearch

useradd elk  

chown -R elk  /usr/local/elasticsearch

cd /usr/local/elasticsearch/config

vim jvm.options文件中的“-Xms2g”修改为“Xms1g” #因为虚拟机内存不够

#在企业服务器上不存在内存不足2g的情况,因此不需要做修改。

vim  elasticsearch.yml    network.host 改为0.0.0.0  表示允许所以主机访问elasticsearch 的端口

ELK日志分析系统

修改elasticsearch.yml  文件memory下bootstrap.memory_lock 为 false

ELK日志分析系统

vim /etc/security/limits.conf 

* soft nofile 65536

* hard nofile 65536

vim /etc/security/limits.d/90-nproc.conf 

* soft  nproc  2048

vim /etc/sysctl.conf

vm.max_map_count=655360

启动elk : su – elk  

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

查看日志  tail -fn 50 /usr/local/elasticsearch/logs/elasticsearch.log

或者查看elasticsearch端口9200 9300

9200 ES对外数据存储端口,客户端连接该端口发送和接收数据;

9300 ES对内部分布式集群节点的端口,分布式节点之间通信;

  • 部署kibana

tar zxf kibana-5.3.0-linux-x86_64.tar.gz

mv kibana-5.3.0-linux-x86_64 /usr/local/kibana

cd  /usr/local/kibana ; chown -R elk.root *

vim /usr/local/kibana/config/kibana.yml 修改server.host后的主机为”0.0.0.0”

并打开elasticsearch.url注释,url修改为ES的地址elasticsearch.url: “http://ESip:9200”

#如果有多个elasticsearch节点,可以直接用逗号分隔“http://localhost:9200,1.1.1.1:9300,1.1.1.2:9400”

cd /usr/local/kibana/bin  

nohup ./kibana &

netstat  -tnlp查看端口5601开启即表示kibana部署成功。

elasticsearch和kibana部署成功,浏览器访问172.20.10.11:5601  看到kibana界面即可。

  • 172.20.10.10 配置logstash

配置jdk

tar zxf logstash-5.3.0.tar.gz

mv logstash-5.3.0 /usr/local/logstash

mkdir  /usr/local/logstash/etc

cd  /usr/local/logstash/etc

vim agent.conf 编写:

input {
   stdin { }
}
output {
   stdout {
 codec => rubydebug { }
}
   elasticsearch {
   hosts => "172.20.10.11:9200" }
}

启动logstash    

../bin/logstash -f agent.conf

随意输入字符,做日志收集测试,例如输入www.wzstyle.cn,如图

ELK日志分析系统

浏览器刷新kibana首页,

看到默认索引名称logstash-*     点击time-file name下方方框选择@timelasticsearchtamp   最后点击create

点击左侧discover ,会显示我们在启动logstash时输入的测试信息,重点看message展示的信息。输入的测试信息会被logstash收集存储在elasticsearch机器的/usr/local/elasticsearch/data/node目录下。

三、汉化kibana

汉化前备份kibana   cp -a kibana/  kibana.bak

下载汉化包 git clone https://github.com/anbai-inc/Kibana_Hanization.git

cd /usr/local/Kibana_Hanization/old

python main.py /usr/local/kibana/

#稍等,看到“恭喜,kibana汉化完成”即可。

重启kibana

ps -ef | grep node

kill pid

cd /usr/local/kibana/bin/

nohup ./kibana &

四、收集nginx日志  

cd /usr/local/logstash/etc/  vim nginx_log.conf写入:

input {
   file {
	type => "nginx-access"            
	path => "/usr/local/nginx/logs/access.log"
	}
}
output {
    elasticsearch {
	hosts => "172.20.10.11:9200"
        }
}

#注意nginx服务正常访问

启动nginx日志收集 nohup  ../bin/logstash -f  nginx_log.conf  &

#在编写日志收集路径的时候最好写绝对路径具体到文件

#可以模拟访问  while sleep 30s; do wget http://172.20.10.10/ ;done

在浏览器看到收集到访问日志即可。

统计172.20.10.12访问了172.20.10.10多少次,可以直接在搜索框里输入12这个ip,页面会直接统计显示访问次数。搜索其他字符也都会统计。

统计时间段,一天,一周,一个月网站的访问量,直接可以设置日志展示的相应对应时间即可。

#注意kibana上展示的host默认是以logstash主机名命名的,如www是我logstash机器的主机名。

五、安装Elasticsearch-head插件

在部署elasticsearch的机器上下载 nodejs 和 npm

yum -y install epel-release

yum -y install nodejs npm  

git clone https://github.com/mobz/elasticsearch-head.git

cd elasticsearch-head

npm install -g grunt –registry=https://registry.npm.taobao.org        #安装grunt工具

npm install –registry=https://registry.npm.taobao.org               #安装head插件

安装好后 vim Gruntfile.js

在文件的结尾部分找到9100端口,在connect和server行之间添加hostname: ‘*’,      如图:

ELK日志分析系统

vim _site/app.js  找到9200端口,并修其之前的改localhost为elasticsearch的ip 172.20.10.11

增加跨域支持,vim /usr/local/elasticsearch/config/elasticsearch.yml 文件尾加上两行:

http.cors.enabled: true

http.cors.allow-origin: “*”

ELK日志分析系统

重启elasticsearch:杀掉并重启9200 9300端口

启动插件:cd /usr/local/elasticsearch-head

nohup ./node_modulelasticsearch/grunt/bin/grunt  server &   或者用 npm run start命令也可启动

插件打开后查看到9100端口即可

浏览器访问172.20.10.11:9100看到elasticsearch-head页面即可。

#增加索引

登录elasticsearch-head —首页索引—新建索引—填写索引名称

六、日志采集存入redis缓存数据库

172.20.10.12配置redis ,修改redis.conf bind为 0.0.0.0

在部署logstash的机器/usr/local/logstash/etc目录下编写一个conf文件并运行:

input {
    file {
	type => "nginx-access"
	path => "/usr/local/nginx/logs/access.log"
	}
}
output {
    redis {
	host => "172.20.10.12"
	port => 6379
	data_type => "list"
	key => "logstash"
    }
}

#一个logstash可以开启多个进程收集多个服务日志,启动时对应不同conf文件就行。

访问部署logstash机器的nginx服务,在172.20.10.12 redis数据库中能查看到key值

redis-cli 开启客户端  keys *    查看key

此时访问nginx的数据还没有存储到elasticsearch并通过kibana进行展示。

把logstash收集的日志先存储到redis里面,再直接从redis数据库里把数据送到elasticsearch在kibana页面展示。

文件如下:

input {
   file {
        type => "nginx-access"
        path => "/usr/local/nginx/logs/accelasticsearchs.log"
        }
}
output {
    redis {
        host => "172.20.10.12"
        port => 6379
        data_type => "list"
        key => "logstash"
        }
}

input {
   redis {
        host => "172.20.10.12"
        port => "6379"
        data_type => "list"
        key => "redis-input"
        }
}
output {
    elasticsearch {
        hosts => "172.20.10.11"
        }
}

#注意一个logstash可以启动多个日志收集进程,conf文件不能重名,修改同一conf文件后需要重启该进程。

#在内网日志量不大的情况不用通过redis转储,直接把日志送到ES即可。

七、logstash多节点部署

多节点配置和第二步logstash部署方法相同,注意/usr/local/logstash/etc/中的conf文件内容别写错。

input {
   file {
	type => "nginx-accelasticsearchs"
	path => "/usr/local/nginx/logs/accelasticsearchs.log"
	}
}
output {
    elasticsearch {
	hosts => "172.20.10.11:9200"
        }
}

八、创建视图报表

可视化—create a visualization—选择视图类型

创建line chart :

选择索引-配置x轴如图,配置后点击应用更改,选择想要的时间即可显示该时间内的访问统计图

#y轴是默认统计的访问次数

ELK日志分析系统

可以点击上方的保存,即保存当前页面的统计图,需要修改名称,完成后,保存在最左侧“可视化”一栏中,点击可视化即可看到。还可以选择分享。

创建pie chart:

选择索引—分隔切片—配置聚合,字段,interval,选择时间,点击应用更改即可。

创建vertical bar chart:

选择索引—配置X轴

将多个统计图表整理在一起,形成一张新图表:

点击左侧“仪表盘”,create a dashboard—add—选择需要放在一起的图表,调整好后点击保存,可点击仪表盘查看。

九、kibana web安全认证

安装kibana的机器下载nginx,配置nginx配置文件如下:

worker_procelasticsearchselasticsearch  1;
events {
    worker_connections  1024;
}
http {
    include       mime.typelasticsearch;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
upstream  kibana_web {
    server    127.0.0.1:5601  weight=1  max_fails=2  fail_timeout=30s;
}
server {
        listen  80;
        server_name  localhost;
        location / {
         auth_basic "ELK Kibana Monitor Center";
         auth_basic_user_file /usr/local/nginx/html/.htpasswd;
         proxy_set_header  Host  $host;
         proxy_pass http://kibana_web;
        }
    }
}

#配置文件中添加了Nginx权限认证:

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

auth_basic “ELK Kibana Monitor Center”;

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

配置好nginx.conf后通过Apache加密工具htpasswd生成用户名和密码:

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

设置密码之后,重启nginx服务。

修改kibana配置文件:

vim /usr/local/kibana/config/kibana.yml  修改server.host后的主机为”127.0.0.1”   #仅允许本机访问

重启kibana服务。

ELK日志分析系统

再次访问需要输入用户名admin和密码登录。

原创文章,作者:wz,如若转载,请注明出处:https://www.wzstyle.cn/263.html

发表评论

邮箱地址不会被公开。 必填项已用*标注