全部博文(51)
分类: 系统运维
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接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。
Elasticsearch 是一个建立在全文搜索引擎 Apache Lucene? 基础上的分布式的,高可用的,基于json格式的数据构建索引,准实时查询的搜索引擎。Lucene 是当今最先进最高效的全功能开源搜索引擎框架,但是Lucene使用非常复杂。
Elasticsearch使用 Lucene 作为内部引擎,但是在你使用它做全文搜索时,只需要使用统一开发好的API即可,而并不需要了解其背后复杂的 Lucene 的运行原理。
硬件:
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到其他节点即可(修改配置文件)
安装要求见
进入官网
#下面的命令实现永久关闭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
#永久修改
[root@elk ~]#hostnamectl set-hostname
或者
[root@elk ~]# vi /etc/hostname
localhost.localdomain ------》把这行修改成下面的
#修改成你自己的主机名
#添加域名
[root@elk ~]#cat /etc/hosts
192.168.201.135
#临时关闭
[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.
#首先修改时区亚洲
#查看时区
[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
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限制高
#需要重启系统才会生效
#在文件末尾添加
[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
[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权限
[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"
}
目录 |
作用 |
/bin |
运行es实例和管理插件的一些脚本 |
/config |
配置文件路径,包含elasticsearch.yml |
/data |
在节点上每个索引/碎片的数据文件的位置,可以多个目录 |
/lib |
Es使用的库 |
/logs |
日志存放目录 |
/plugins |
已经安装的插件存放位置 |
/modules |
模块目录 |
注:
数据目录可以指定多个,以便将数据分散在多块磁盘位置上,不过属于同一块分块内的文件,将被写入相同的地址。
---------------------------------
path.data: /mnt/first,/mnt/second
---------------------------------
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