ELK-(elasticsearch+logstash+kibana)环境搭建

# 环境:elasticsearch 2.4.6,kibana4.6.1 ,logstash2.4.0

机器虚拟机IP为:192.168.75.6

安装elasticsearch
更改config目录下的 elasticsearch.yml
#集群名称,如果有多个集群,那么每个集群名就得是唯一的
cluster.name: my.elk
#节点名称
node.name: node-192.168.75.6
#该节点是否是master,true表示是的,false表示否,默认是true
node.master: true
#该节点是否存储数据,默认true表示是的
node.data: true
#http访问端口,默认是9200,通过这个端口,调用方可以索引查询请求
http.port: 9200
#节点之间通信的端口,默认为9300
transport.tcp.port: 9300
#访问地址 配置外网访问
network.host: 0.0.0.0
#设置集群的ip及端口  有多少台机器就需要添加多少个
#discovery.zen.ping.unicast.hosts: ["127.0.0.1:9300", "127.0.0.1:8300"]
#设置一台机子能运行的节点数目,一般采用默认的1即可,因为我们一般也只在一台机子上部署一个节点
#node.max_local_storage_nodes: 2
安装head插件
./plugin install mobz/elasticsearch-head
#-d 表示后台启动
启动 ./bin/elasticsearch -d
elasticsearch安装启动需要非root权限

启动报错时,如果是用户无读写权限,可以在root权限下使用 chown -R 用户名 文件夹,赋予用户该文件夹读写权
启动成功后,访问ip+端口。

高版本中启动存在:max number of threads [3753] for user [XX] is too low, increase to at least [4096]

编写shell脚本,并执行后重启

#!/bin/bash 
echo "* soft nofile 65536" >> /etc/security/limits.conf
echo "* hard nofile 65536" >> /etc/security/limits.conf
echo "* soft memlock unlimited" >> /etc/security/limits.conf 
echo "* hard memlock unlimited" >> /etc/security/limits.conf
echo "vm.max_map_count = 262144" >> /etc/sysctl.conf
sysctl -p
ulimit -l unlimited

访问

ip+端口+"/_plugin/head"
2.安装logstash
a.创建配置文件的文件夹,在文件夹中创建配置文件
  • 配置收集指定目录下的日志文件
#收集标志
 input {		
        file {
                type => "log" 
                #收集日志的地方,注意不能远程收取
                path => ["/usr/local/*/logs/*.log"]	
                #如果log文件已经很大了 不要配start,第二次会有记录
                start_position => "end"
                #忽略最后修改时间是大于多少s的
                ignore_older => 0
                #重点注意 解决日志换行问题。
                codec=> multiline {
                        pattern => "^%{TIMESTAMP_ISO8601}"
                        negate => true
                        what => "previous"
                }
        }
        beats {
            #logstash的端口号
            port => 5044
        }
}
output {
        #收取“type”为“log” 的日志
        if [type] == "log" {
		elasticsearch {
			hosts => ["http://127.0.0.1:9200"]
   		#表示的是索引库 按日期分
			index => "log-%{+YYYY.MM}"
                   #配置了nginx密码的则需要填写
                   #如果我们是通过nginx来访问elasticsearch的话,建议配置账户密码,以免被攻击
			#user => user		
			#password => pwd
		}	
	}
}

  • 配置获取数据库
  1. 下载mysql-connector-java.jar
wget -P /usr/local/src/  https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-java-5.1.46.zip
unzip /usr/local/src/mysql-connector-java-5.1.46.zip  -d /usr/local/
  1. 配置文件
input {
  jdbc {
    jdbc_driver_library => "/usr/local/mysql-connector-java-5.1.46/mysql-connector-java-5.1.46.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://172.16.140.xxx:3306/gatexxx"
    jdbc_user => "root"
    jdbc_password => "xxxxx"
    schedule => "* * * * *"
    statement => "SELECT * FROM browser_req_log  WHERE gmt_create  >= :sql_last_value  limit 100"
    use_column_value => true
    tracking_column_type => "timestamp"
    tracking_column => "gmt_create"
    last_run_metadata_path => "syncpoint_table"
  }
}
 
 
filter {
     mutate {
      add_field => {"temp_ts" => "%{gmt_create}"}
    }
	#添加数据库字段作为 timestamp
 
    # timestamp
    date {
      match => ["temp_ts","ISO8601"]
      remove_field => ["temp_ts"]
      timezone => "Asia/Shanghai"
    }
 
output {
  elasticsearch {
    hosts => ["172.16.140.120", "172.16.140.121", "172.16.140.122"]
    index => "browser_req-log"
    document_id => "%{id}"
  }
}


3.参数说明

jdbc_driver_library: jdbc mysql 驱动的路径,在上一步中已经下载
jdbc_driver_class: 驱动类的名字,mysql 填 com.mysql.jdbc.Driver 就好了
jdbc_connection_string: mysql 地址
jdbc_user: mysql 用户
jdbc_password: mysql 密码
schedule: 执行 sql 时机,类似 crontab 的调度
statement: 要执行的 sql,以 ":" 开头是定义的变量,可以通过 parameters 来设置变量,这里的 sql_last_value 是内置的变量,表示上一次 sql 执行中 update_time 的值,这里 update_time 条件是 >= 因为时间有可能相等,没有等号可能会漏掉一些增量
use_column_value: 使用递增列的值
tracking_column_type: 递增字段的类型,numeric 表示数值类型, timestamp 表示时间戳类型
tracking_column: 递增字段的名称,这里使用 update_time 这一列,这列的类型是 timestamp
last_run_metadata_path: 同步点文件,这个文件记录了上次的同步点,重启时会读取这个文件,这个文件可以手动修改
hosts: es 集群地址
user: es 用户名
password: es 密码
index: 导入到 es 中的 index 名,这里我直接设置成了 mysql 表的名字
document_id: 导入到 es 中的文档 id,这个需要设置成主键,否则同一条记录更新后在 es 中会出现两条记录,%{id} 表示引用 mysql 表中 id 字段的值

b.启动命令:
 ./bin/logstash -f config/log.conf
如果收取的日志不止是上面所要的 .log文件,那么需要配置多个*.conf文件。
启动命令为: ./bin/logstash -f config 指定目录即可。
#后台启动,将启动日志打印指log.log
nohup ./bin/logstash -f config/log.conf > mylog/log.log 2>&1 &
3.安装kibana
修改kibana.yml中的 elasticsearch.url
elasticsearch.url: "http://127.0.0.1:9200"
启动 kibana:
 ./bin/kibana
后台启动
nohup ./bin/kibana >nohup.out 2>&1 &

访问:默认端口 5601

你可能感兴趣的:(elasticsearch)