Chinaunix首页 | 论坛 | 博客
  • 博客访问: 161331
  • 博文数量: 51
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 471
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-11 10:24
文章分类

全部博文(51)

文章存档

2018年(3)

2017年(22)

2016年(9)

2015年(17)

我的朋友

分类: 系统运维

2017-11-10 15:55:11

一、  简介

     Elasticsearch + Logstash + Kibana(ELK)是一套开源的日志管理方案,分析网站的访问情况时我们一般会借助Google/百度等方式嵌入JS做数据统计,但是当网站访问异常或者被攻击时我们需要在后台分析如Nginx的具体日志,而Nginx日志分割/GoAccess/Awstats都是相对简单的单节点解决方案,针对分布式集群或者数据量级较大时会显得心有余而力不足,而ELK的出现可以使我们从容面对新的挑战

  • Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。

  • Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。

  • Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。

1.1 Elasticsearch

    Elasticsearch 是一个建立在全文搜索引擎 Apache Lucene? 基础上的分布式的,高可用的,基于json格式的数据构建索引,准实时查询的搜索引擎。Lucene 是当今最先进最高效的全功能开源搜索引擎框架,但是Lucene使用非常复杂。

    Elasticsearch使用 Lucene 作为内部引擎,但是在你使用它做全文搜索时,只需要使用统一开发好的API即可,而并不需要了解其背后复杂的 Lucene 的运行原理。

二、  Elasticsearch安装

2.1 环境配置

硬件:

Redhat-7.x系列_x86_64

Mem建议至少4G

软件:

       elasticsearch-5.2.0

       java-1.8

安装方式采用源码

 

注意

  es(elasticsearch)版本2.x以上需要JDK 1.8以上

  运行es不能使用root用来来运行

  es目录必须指定一个普通用户和组(授权)

  es对内存和CPU的消耗比较高

  es使用的端口看开放iptables:9200,9300等

  es配置其他插件实现资源等可视化监控

  es的版本和插件之间版本要匹配

  es集群配置,第一节点配置好scp到其他节点即可(修改配置文件)

  安装要求见

2.1.1下载 

#jdk下载

#Elasticsearch下载

进入官网

2.2 准备

2.2.1 关闭SELinux

#下面的命令实现永久关闭SELinux

[root@elk ~]# sed -i 's/^SELINUX=.*/#&/;s/^SELINUXTYPE=.*/#&/;/SELINUX=.*/a SELINUX=disabled' /etc/sysconfig/selinux

#永久修改下主机名,需要重启系统之后生效

#下面的命令实现临时关闭SELinux

[root@elk ~]# setenforce 0

setenforce: SELinux is disabled

2.2.2 修改主机名

#永久修改

[root@elk ~]#hostnamectl set-hostname 

或者

[root@elk ~]# vi /etc/hostname

localhost.localdomain ------》把这行修改成下面的

 #修改成你自己的主机名

#添加域名

[root@elk ~]#cat /etc/hosts

192.168.201.135 

2.2.3 关闭firewall

#临时关闭

[root@elk ~]# iptables -F

或者

[root@elk ~]# systemctl stop firewalld.service

#永久关闭,需要下次重启系统之后生效

[root@elk ~]# systemctl disable firewalld.service

Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.

2.2.4 同步时间

#首先修改时区亚洲

#查看时区

[root@elk config]# ls -l /etc/localtime

lrwxrwxrwx. 1 root root 38 Apr 13 18:08 /etc/localtime -> ../usr/share/zoneinfo/America/New_York

#删除link

 

[root@elk yum.repos.d]# ntpdate 

10 Apr 11:00:04 ntpdate[40122]: step time server 216.229.0.179 offset 53747.856066 sec

2.2.5 修改open files

Why?

启动elasticsearch出现如下错误

1

ERROR: bootstrap checks failed

问题:最大文件描述符打开的太低,需要增加

max file descriptors [65535] for elasticsearch process likelytoo low, increase to at least [65536]

2

问题:最大线程数,打开的太低,需要增加线程数

max number of threads [1024] for user [elasticsearch] likely toolow, increase to at least [2048]

解决:

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

* soft nproc 2048

3

问题:打开虚拟内存的个数太少需要增加

max virtual memory areas vm.max_map_count [65530] likely toolow, increase to at least [262144]

解决:

[root@elk ~]#vi /etc/sysctl.conf

vm.max_map_count=655360

[root@elk ~]#sysctl -p

#查看打开文件数

[root@elk ~]# ulimit -a

core file size          (blocks, -c) 0

data seg size           (kbytes, -d) unlimited

scheduling priority             (-e) 0

file size               (blocks, -f) unlimited

pending signals                 (-i) 18705

max locked memory       (kbytes, -l) 64

max memory size         (kbytes, -m) unlimited

open files                      (-n) 1024 -----------------》默认为1024

pipe size            (512 bytes, -p) 8

POSIX message queues     (bytes, -q) 819200

real-time priority              (-r) 0

stack size              (kbytes, -s) 8192

cpu time               (seconds, -t) unlimited

max user processes              (-u) 4096

virtual memory          (kbytes, -v) unlimited

file locks                      (-x) unlimited

#临时修改

[root@elk ~]# ulimit -SHn 65536

注:

       -S 设置软件资源限制

       -H 设置硬件资源限制

       -n 设置内核可以同时可以打开文件描述符

[root@elk ~]# ulimit -n

65536

注:

       修改这个原因,启动elasticsearch 会出现这个情况too many open files,导致启动失败

#永久修改

#在文件最后添加

[root@elk ~]# vi /etc/security/limits.conf

* soft nofile 65536

* hard nofile 131072

* soft nproc 2048

* hard nproc 4096

       文件格式:username|@groupname type resource limit

       分为3中类型type(有 soft,hard 和 -)

              soft是指当前系统生效的设置值

              hard 系统设置的最大值

-       同时设置了soft和hard的值

 

nofile - 打开文件的最大数目

noproc - 进程的最大数目

soft<=hard soft的限制不能比hard限制高

#需要重启系统才会生效

#修改kernel配置文件

#在文件末尾添加

[root@elk ~]# vi /etc/sysctl.conf

vm.max_map_count=655360

#生效下

[root@elk ~]#sysctl -p

注:

vm.max_map_count文件允许max_map_count限制虚拟内存的数量

官方地址https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html

2.4.2 安装elasticsearch

#创建elk用户

[root@localhost application]# adduser  -s /bin/bash -c 'elk' -m -d /home/elk elk

注:

       从2.0开始不能用root用户启动需要elk用户启动

#解压

[root@elk elk_pack]# tar zxvf elasticsearch-5.2.0.tar.gz -C /data/application/

注:

       Elasticsearch是不需要编译的,解压就可以使用

#修改配置文件

#备份配置文件

[root@elk ~]# cp /data/application/elasticsearch-5.2.0/config/elasticsearch.yml{,.ori}

#找到以下几行修改

[root@elk config]# vi elasticsearch.yml

path.data: /data/shuju               ----》存放数据路径

path.logs: /data/logs            -----》日志路径

network.host: 192.168.201.137   -----》根据自己的ip修改

http.port: 9200

#创建los,shuju

[root@elk config]#mkdir /data/{shuju,logs}

#启动elasticsearch

#修改elasticsearch权限

[root@elk ~]#chown -R elk.elk /data/application/elasticsearch-5.2.0/

[root@elk ~]#chown -R elk.elk /data/{shuju,logs}

[root@elk ~]# su – elk

#在前台显示下效果

[elk@elk ~]$/data/application/elasticsearch-5.2.0/bin/elasticsearch

[2017-04-12T22:29:46,478][INFO ][o.e.n.Node               ] [] initializing ...

[2017-04-12T22:29:46,714][INFO ][o.e.e.NodeEnvironment    ] [z8htm2J] using [1] data paths, mounts [[/ (rootfs)]], net usable_space [8gb], net total_space [16.9gb], spins? [unknown], types [rootfs]

[2017-04-12T22:29:46,714][INFO ][o.e.e.NodeEnvironment    ] [z8htm2J] heap size [1.9gb], compressed ordinary object pointers [true]

[2017-04-12T22:29:46,755][INFO ][o.e.n.Node               ] node name [z8htm2J] derived from node ID [z8htm2JoRRaW0bsTgx-rhQ]; set [] to override

[2017-04-12T22:29:46,756][INFO ][o.e.n.Node               ] version[5.3.0], pid[4012], build[3adb13b/2017-03-23T03:31:50.652Z], OS[Linux/3.10.0-514.10.2.el7.x86_64/amd64],

mustache]

中间内容省略。。。。。

[2017-04-12T22:29:51,352][INFO ][o.e.p.PluginsService     ] [z8htm2J] no plugins loaded

into cluster_state

[2017-04-12T22:30:04,658][INFO ][o.e.c.r.a.AllocationService] [z8htm2J] Cluster health status changed from [RED] to [YELLOW]

注:

       如果执行完这个脚本,中途没有退出,说明启动成功

#测试是否成功

[root@elk ~]# curl 192.168.201.135:9200

{

  "name" : "z8htm2J",

  "cluster_name" : "elasticsearch",

  "cluster_uuid" : "wEbF7BwgSe-0vFyHb1titQ",

  "version" : {

    "number" : "5.3.0",

    "build_hash" : "3adb13b",

    "build_date" : "2017-03-23T03:31:50.652Z",

    "build_snapshot" : false,

    "lucene_version" : "6.4.1"

  },

  "tagline" : "You Know, for Search"

}

#Elasticsearch(5.x)目录结构

目录

作用

/bin

运行es实例和管理插件的一些脚本

/config

配置文件路径,包含elasticsearch.yml

/data

在节点上每个索引/碎片的数据文件的位置,可以多个目录

/lib

Es使用的库

/logs

日志存放目录

/plugins

已经安装的插件存放位置

/modules

模块目录

注:

数据目录可以指定多个,以便将数据分散在多块磁盘位置上,不过属于同一块分块内的文件,将被写入相同的地址。

---------------------------------

path.data: /mnt/first,/mnt/second

---------------------------------

# Elasticsearch重要配置文件

5.0以前的版本只有elasticsearch.yml和logging.yml,在5.0.x取消了logging.yml

#/path/elasticsearch.yml   配置elasticsearch集群

#/path/jvm.options        配置elasticsearch的jvm参数

#/paht/log4j2.properties   配置elasticsearch日志参数


出现以上情况,证明elasticsearch可以正常使用

eleastic启动脚本,elasticsearch.sh#!/bin/sh
set -o nounset
ES_HOME=/data/application/elasticsearch-5.2.0
PID=$(jps | grep Elasticsearch | awk '{print $1}')
KILL_ES="kill -s 9 `jps | grep Elasticsearch | awk '{print $1}'`"
#env
ES_USER=elk

case $1 in
    start)
        if [ -n "$PID" ];then
            echo "elasticsearch process is already running."
        else
            echo -n "Starting elasticsearch Server..."
            su - ${ES_USER} -c "${ES_HOME}/bin/elasticsearch -d"
            echo "done"
        fi
        ;;
    stop)
        if [ -z "$PID" ];then
            echo "elasticsearch process is not running."
        else
             echo -n "Stopping elasticsearch Server..."
             /bin/su - $ES_USER  -c "${KILL_ES}"
            echo "done"
        fi
        ;;
    *)
        echo "Usage: service $0 {start|stop|restart}" >&2
        exit 1
esac


    • 以下是5系列安装方式
      h7.#首先安装nodejs和npm、phantomjs
      [root@elk ~]# yum install nodejs npm -y
      h7.#安装phantomjs
      #下载phantomjs
      wget 
      #解压,直接使用,不需要编译
      [root@noede1 es5.2_plugins]#tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
      h7.#下载源码
      [root@elk ~]# git clone 
      h7.#安装
      #cd 到源码目录
      [root@elk es5.2_plugins]# cd elasticsearch-head/
      [root@elk elasticsearch-head]# npm install
      npm WARN prefer global coffee-script@1.10.0 should be installed with -g 
      > phantomjs-prebuilt@2.1.14 install /root/es5.2_plugins/elasticsearch-head/node_modules/phantomjs-prebuilt
      > node install.js 
      Considering PhantomJS found at /usr/local/phantomjs-2.1.1/bin/phantomjs
      Found PhantomJS at /usr/local/phantomjs-2.1.1/bin/phantomjs ...verifying
      Writing location.js file
      PhantomJS is already installed on PATH at /usr/local/phantomjs-2.1.1/bin/phantomjs
      elasticsearch-head@0.0.0 /root/es5.2_plugins/elasticsearch-head
      ├─┬ grunt@1.0.1 
      │ ├── coffee-script@1.10.0
      中间部分省略。。。。。
      npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_modules/chokidar/node_modules/fsevents):
      npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.1.1: wanted {"os":"darwin","arch":"any"} (current: {"os":"linux","arch":"x64"})
      npm WARN elasticsearch-head@0.0.0 license should be a valid SPDX license expression
      注:
      这两个警告不影响head的使用,只要不是error就可以
      安装完目录
      [root@elk elasticsearch-head]# ll
      total 64
      省略….
      rw-rr-. 1 root root 559 Apr 18 09:41 LICENCE
      drwxr-xr-x. 325 root root 12288 Apr 18 09:42 node_modules
      rw-rr-. 1 root root 886 Apr 18 09:41 package.json
      rw-rr-. 1 root root 100 Apr 18 09:41 plugin-descriptor.properties
      drwxr-xr-x. 4 root root 70 Apr 18 09:50 proxy
      rw-rr-. 1 root root 6740 Apr 18 09:55 README.textile
      drwxr-xr-x. 5 root root 4096 Apr 18 09:41 _site
      drwxr-xr-x. 4 root root 29 Apr 18 09:41 src
      drwxr-xr-x. 4 root root 66 Apr 18 09:41 test
      h7.#修改es配置文件
      #vi /data/application/elasticsearch-5.2.0/config/elasticsearch.yml
      #在文件末尾添加,如下两行
      http.cors.enabled: true
      http.cors.allow-origin: ""*
      注意:
      作用:控制访问的域名
      修改配置文件之后,需要重启es
      http.cors.enabled: true #开启域名访问
      http.cors.allow-origin: "" #访问控制,通配符
      h7.#修改head访问port
      [root@noede1 elasticsearch-head]# pwd
      /data/application/es5.2_plugins/elasticsearch-head
      [root@noede1 elasticsearch-head]# vi Gruntfile.js +93
      保存退出
      h7.#启动
      [root@elk elasticsearch-head]# ./node_modules/grunt/bin/grunt server
      Running "connect:server" (connect) task
      Waiting forever...
      Started connect web server on  #默认是localhost
      注:
      修改localhost为具体ip地址
      #关闭head服务
      #cd head目录下
      [root@elk elasticsearch-head]# grep -irn "hostname: '0.0.0.0'" ./*
      ./node_modules/grunt-contrib-connect/tasks/connect.js:53: hostname: '0.0.0.0',
      修改为自己的ip
      [root@elk elasticsearch-head]#vi ./node_modules/grunt-contrib-connect/tasks/connect.js


阅读(1332) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~