一、ELK搭建篇
官网地址:https://www.elastic.co/cn/
官网权威指南:
https://www.elastic.co/guide/cn/elasticsearch/guide/current/index.html
安装指南:
https://www.elastic.co/guide/en/elasticsearch/reference/5.x/rpm.html
ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。
Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。
Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据
环境
Centos6.5 两台 IP:192.168.1.202 安装: elasticsearch、logstash、Kibana、Nginx、Http、Redis 192.168.1.201 安装: logstash
安装
安装elasticsearch的yum源的密钥(这个需要在所有服务器上都配置) # rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch 配置elasticsearch的yum源 # vim /etc/yum.repos.d/elasticsearch.repo 在elasticsearch.repo文件中添加如下内容 [elasticsearch-5.x] name=Elasticsearch repository for 5.x packages baseurl=https://artifacts.elastic.co/packages/5.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md
安装elasticsearch的环境
安装elasticsearch # yum install -y elasticsearch 安装java环境(java环境必须是1.8版本以上的) wget http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm rpm -ivh jdk-8u131-linux-x64.rpm 验证java安装成功 java -version java version "1.8.0_131" Java(TM) SE Runtime Environment (build 1.8.0_131-b11) Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
创建elasticsearch data的存放目录,并修改该目录的属主属组
# mkdir -p /data/es-data (自定义用于存放data数据的目录) # chown -R elasticsearch:elasticsearch /data/es-data
修改elasticsearch的日志属主属组
# chown -R elasticsearch:elasticsearch /var/log/elasticsearch/
修改elasticsearch的配置文件
# vim /etc/elasticsearch/elasticsearch.yml# yum install -y elasticsearch 找到配置文件中的cluster.name,打开该配置并设置集群名称 cluster.name: demon 找到配置文件中的node.name,打开该配置并设置节点名称 node.name: elk-1 修改data存放的路径 path.data: /data/es-data 修改logs日志的路径 path.logs: /var/log/elasticsearch/ 配置内存使用用交换分区 bootstrap.memory_lock: true 监听的网络地址 network.host: 0.0.0.0 开启监听的端口 http.port: 9200 增加新的参数,这样head插件可以访问es (5.x版本,如果没有可以自己手动加) http.cors.enabled: true http.cors.allow-origin: "*" 启动elasticsearch服务
启动服务
/etc/init.d/elasticsearch start Starting elasticsearch: Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x0000000085330000, 2060255232, 0) failed; error='Cannot allocate memory' (errno=12) # # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 2060255232 bytes for committing reserved memory. # An error report file with more information is saved as: # /tmp/hs_err_pid2616.log [FAILED] 这个报错是因为默认使用的内存大小为2G,虚拟机没有那么多的空间 修改参数: vim /etc/elasticsearch/jvm.options -Xms512m -Xmx512m 再次启动 /etc/init.d/elasticsearch start 查看服务状态,如果有报错可以去看错误日志 less /var/log/elasticsearch/demon.log(日志的名称是以集群名称命名的) 创建开机自启动服务 # chkconfig elasticsearch on
注意事项
需要修改几个参数,不然启动会报错 vim /etc/security/limits.conf 在末尾追加以下内容(elk为启动用户,当然也可以指定为*) elk soft nofile 65536 elk hard nofile 65536 elk soft nproc 2048 elk hard nproc 2048 elk soft memlock unlimited elk hard memlock unlimited 继续再修改一个参数 vim /etc/security/limits.d/90-nproc.conf 将里面的1024改为2048(ES最少要求为2048) * soft nproc 2048 另外还需注意一个问题(在日志发现如下内容,这样也会导致启动失败,这一问题困扰了很久) [2017-06-14T19:19:01,641][INFO ][o.e.b.BootstrapChecks ] [elk-1] bound or publishing to a non-loopback or non-link-local address, enforcing bootstrap checks [2017-06-14T19:19:01,658][ERROR][o.e.b.Bootstrap ] [elk-1] node validation exception [1] bootstrap checks failed [1]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk 解决:修改配置文件,在配置文件添加一项参数(目前还没明白此参数的作用) vim /etc/elasticsearch/elasticsearch.yml bootstrap.system_call_filter: false
通过浏览器请求下9200的端口,看下是否成功
先检查9200端口是否起来 netstat -antp |grep 9200 tcp 0 0 :::9200 :::* LISTEN 2934/java 浏览器访问测试是否正常(以下为正常) # curl http://127.0.0.1:9200/ { "name" : "linux-node1", "cluster_name" : "demon", "cluster_uuid" : "kM0GMFrsQ8K_cl5Fn7BF-g", "version" : { "number" : "5.4.0", "build_hash" : "780f8c4", "build_date" : "2017-04-28T17:43:27.229Z", "build_snapshot" : false, "lucene_version" : "6.5.0" }, "tagline" : "You Know, for Search" }
如何和elasticsearch交互
JavaAPI RESTful API Javascript,.Net,PHP,Perl,Python 利用API查看状态 # curl -i -XGET 'localhost:9200/_count?pretty' HTTP/1.1 200 OK content-type: application/json; charset=UTF-8 content-length: 95 { "count" : 0, "_shards" : { "total" : 0, "successful" : 0, "failed" : 0 } }
安装插件
安装elasticsearch-head插件 安装docker镜像或者通过github下载elasticsearch-head项目都是可以的,1或者2两种方式选择一种安装使用即可 1. 使用docker的集成好的elasticsearch-head # docker run -p 9100:9100 mobz/elasticsearch-head:5 docker容器下载成功并启动以后,运行浏览器打开http://localhost:9100/ 2. 使用git安装elasticsearch-head # yum install -y npm # git clone git://github.com/mobz/elasticsearch-head.git # cd elasticsearch-head # npm install # npm run start 检查端口是否起来 netstat -antp |grep 9100 浏览器访问测试是否正常 http://IP:9100/
LogStash的使用
安装Logstash环境: 官方安装手册: https://www.elastic.co/guide/en/logstash/current/installing-logstash.html 下载yum源的密钥认证: # rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch 利用yum安装logstash # yum install -y logstash 查看下logstash的安装目录 # rpm -ql logstash 创建一个软连接,每次执行命令的时候不用在写安装路劲(默认安装在/usr/share下) ln -s /usr/share/logstash/bin/logstash /bin/ 执行logstash的命令 # logstash -e 'input { stdin { } } output { stdout {} }' 运行成功以后输入: nihao stdout返回的结果:
注: -e 执行操作 input 标准输入 { input } 插件 output 标准输出 { stdout } 插件 通过rubydebug来输出下更详细的信息 # logstash -e 'input { stdin { } } output { stdout {codec => rubydebug} }' 执行成功输入: nihao stdout输出的结果:
如果标准输出还有elasticsearch中都需要保留应该怎么玩,看下面 # /usr/share/logstash/bin/logstash -e 'input { stdin { } } output { elasticsearch { hosts => ["192.168.1.202:9200"] } stdout { codec => rubydebug }}' 运行成功以后输入: I am elk 返回的结果(标准输出中的结果):
logstash使用配置文件
官方指南: https://www.elastic.co/guide/en/logstash/current/configuration.html 创建配置文件01-logstash.conf # vim /etc/logstash/conf.d/elk.conf 文件中添加以下内容 input { stdin { } } output { elasticsearch { hosts => ["192.168.1.202:9200"] } stdout { codec => rubydebug } } 使用配置文件运行logstash # logstash -f ./elk.conf 运行成功以后输入以及标准输出结果
logstash的数据库类型
1. Input插件 权威指南:https://www.elastic.co/guide/en/logstash/current/input-plugins.html file插件的使用 # vim /etc/logstash/conf.d/elk.conf 添加如下配置 input { file { path => "/var/log/messages" type => "system" start_position => "beginning" } } output { elasticsearch { hosts => ["192.168.1.202:9200"] index => "system-%{+YYYY.MM.dd}" } } 运行logstash指定elk.conf配置文件,进行过滤匹配 #logstash -f /etc/logstash/conf.d/elk.conf
来一发配置安全日志的并且把日志的索引按类型做存放,继续编辑elk.conf文件
# vim /etc/logstash/conf.d/elk.conf 添加secure日志的路径 input { file { path => "/var/log/messages" type => "system" start_position => "beginning" } file { path => "/var/log/secure" type => "secure" start_position => "beginning" } } output { if [type] == "system" { elasticsearch { hosts => ["192.168.1.202:9200"] index => "nagios-system-%{+YYYY.MM.dd}" } } if [type] == "secure" { elasticsearch { hosts => ["192.168.1.202:9200"] index => "nagios-secure-%{+YYYY.MM.dd}" } } } 运行logstash指定elk.conf配置文件,进行过滤匹配 # logstash -f ./elk.conf
这些设置都没有问题之后,接下来安装下kibana,可以让在前台展示
Kibana的安装及使用
安装kibana环境 官方安装手册:https://www.elastic.co/guide/en/kibana/current/install.html 下载kibana的tar.gz的软件包 # wget https://artifacts.elastic.co/downloads/kibana/kibana-5.4.0-linux-x86_64.tar.gz 解压kibana的tar包 # tar -xzf kibana-5.4.0-linux-x86_64.tar.gz 进入解压好的kibana # mv kibana-5.4.0-linux-x86_64 /usr/local 创建kibana的软连接 # ln -s /usr/local/kibana-5.4.0-linux-x86_64/ /usr/local/kibana 编辑kibana的配置文件 # vim /usr/local/kibana/config/kibana.yml 修改配置文件如下,开启以下的配置 server.port: 5601 server.host: "0.0.0.0" elasticsearch.url: "http://192.168.1.202:9200" kibana.index: ".kibana" 安装screen,以便于kibana在后台运行(当然也可以不用安装,用其他方式进行后台启动) # yum -y install screen # screen # /usr/local/kibana/bin/kibana netstat -antp |grep 5601 tcp 0 0 0.0.0.0:5601 0.0.0.0:* LISTEN 17007/node 打开浏览器并设置对应的index http://IP:5601