ELK (一)

关于ELK

ELK 而是一整套解决方案,是三个软件产品的首字母缩写,Elasticsearch,Logstash 和 Kibana。这三款软件都是开源软件,通常是配合使用。

elk-structure

Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,分步式实时文件存储,所有对象都是文档。

Logstash 是一个具有实时渠道能力的数据收集引擎。几乎可以访问任何数据,支持多种外部应用。主要分为三部分:
Shipper-发送日志数据;Broker-收集数据;Indexer-数据写入。三部分的结构如下图:

Logstash基本组成

Kibana 它可以在 Elasticsearch 的索引中查找,交互数据,并生成各种维度的表图。

ELK的安装

ElasticSearch 的安装:

  1. 从官网https://www.elastic.co/downloads/elasticsearch下载

  2. 解压。看到里面的文件结构是这样子的:

    unzip ES

  3. 配置最大最小可使用的空间。我的机器只有1G的内存,所以修改ES的配置文件。配置文件是xxx/config/jvm.options,修改后的配置项为,-Xms-Xmx。比如下图,我分配给ES的最大可用是512MB

    max-min-space

  4. 修改默认的端口。ES默认是使用的9200这个端口,如果你想改成别的端口,那么就需要修改xxx/config/elasticsearch.yml配置文件,把里面的端口改成你想要的端口。例如,我就随便改成了17528

    change-default-port-of-es

  5. 运行 bin/elasticsearch

  6. 发现报错,如下图。原来是至少要java8

    ES-need-java8

  7. 安装Java ,yum install java-1.8.0-openjdk

    launch ES

  8. 安装完JAVA8之后再次运行。会有很多东西打印出来,当看到started这句话的时候,就表示启动成功了

Logstash安装

1.从官网下载

2.解压

3.编写配置文件。

举例,我想把我的nginx日志放到ES里面,我在`config`文件夹里面新建一个叫`mynginx.conf`的配置文件,里面的内容如下:
	input {
	
	   file  {
	            path => "/usr/local/nginx/logs/access.log"
	            sincedb_write_interval => 5  # 每5秒钟写一次文件读取记录
	            start_position => "beginning" # 每个文件都从头开始读写
	    }
	}
	filter {
	    grok {
	
	        match => { "message" => "%{NGINXACCESS}" }
	    }
	
	}
	output {
	  elasticsearch {
	        hosts => ["localhost:17528"]
	        index => "parsed-nginx-access-log"
	  }
	  stdout { codec => rubydebug }
	}

注意:如果在安装ElasticSearch的时候,你把默认的9200端口改成了别的,那么在Logstash的配置里面,也要修改。

这份配置文件里面用到的正则匹配规则NGINXACCESS,存放在patterns文件夹中,内容如下:

	NGINXACCESS %{IPORHOST:remote_addr} - %{USERNAME:remote_user} \[%{HTTPDATE:time_local}\] "%{WORD:method} %{URIPATHPARAM:request} HTTP/%{NUMBER:http_version}" %{INT:status} %{INT:body_bytes_sent} %{QS:request_body} %{QS:http_referer} %{QS:http_user_agent} %{QS:http_x_forwarded_for} %{NUMBER:request_time:float} %{NUMBER:upstream_response_time:float}

4.启动 bin/logstash -f config/mynginx.conf,使用-f选项指定配置文件

kibana 安装

  1. 官网下载

  2. 解压

  3. 修改kibana.yml配置,将server.host改成0.0.0.0, 就可以在浏览器里面使用ip地址加端口访问kibana。进入kibana之后就看到如下界面

    launch kibana

  4. 上面说了可以用ip+port的形式,在浏览器里面直接访问。那岂不是所有人都可以访问!!为了避免信息泄露,需要给kibana加上用户名、密码登录。

    4.1 安装 Apache Httpd 密码生成工具,使用命令yum install httpd-tools -y

    4.2 为kibana生成用户名密码

    $ mkdir -p /usr/local/nginx/conf/passwd
    $ htpasswd -c -b /usr/local/nginx/conf/passwd/kibana.passwd YourName YourPassword
    

Adding password for user YourName
```

4.3 配置Nginx反向代理

```
server {
listen xx.xx.xx.xx:8888;
auth_basic "Restricted Access";
auth_basic_user_file /usr/local/nginx/conf/passwd/kibana.passwd;
location / {
	proxy_pass http://xx.xx.xx.xx:8889;
	proxy_http_version 1.1;
	proxy_set_header Upgrade $http_upgrade;
	proxy_set_header Connection 'upgrade';
	proxy_set_header Host $host;
	proxy_cache_bypass $http_upgrade; 
	}
}
```
  1. 这样的话,进入kibana,就需要输入用户名密码了

关于ELK的安装,就先写到这里。