ELK (一)
关于ELK
ELK 而是一整套解决方案,是三个软件产品的首字母缩写,Elasticsearch,Logstash 和 Kibana。这三款软件都是开源软件,通常是配合使用。
Elasticsearch 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎 Apache Lucene 基础上的搜索引擎,分步式实时文件存储,所有对象都是文档。
Logstash 是一个具有实时渠道能力的数据收集引擎。几乎可以访问任何数据,支持多种外部应用。主要分为三部分:
Shipper
-发送日志数据;Broker
-收集数据;Indexer
-数据写入。三部分的结构如下图:
Kibana 它可以在 Elasticsearch 的索引中查找,交互数据,并生成各种维度的表图。
ELK的安装
ElasticSearch 的安装:
-
从官网
https://www.elastic.co/downloads/elasticsearch
下载 -
解压。看到里面的文件结构是这样子的:
-
配置最大最小可使用的空间。我的机器只有1G的内存,所以修改ES的配置文件。配置文件是
xxx/config/jvm.options
,修改后的配置项为,-Xms
和-Xmx
。比如下图,我分配给ES的最大可用是512MB -
修改默认的端口。ES默认是使用的
9200
这个端口,如果你想改成别的端口,那么就需要修改xxx/config/elasticsearch.yml
配置文件,把里面的端口改成你想要的端口。例如,我就随便改成了17528
-
运行
bin/elasticsearch
-
发现报错,如下图。原来是至少要java8
-
安装Java ,
yum install java-1.8.0-openjdk
-
安装完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 安装
-
从官网下载
-
解压
-
修改kibana.yml配置,将server.host改成0.0.0.0, 就可以在浏览器里面使用ip地址加端口访问kibana。进入kibana之后就看到如下界面
-
上面说了可以用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;
}
}
```
- 这样的话,进入kibana,就需要输入用户名密码了
关于ELK的安装,就先写到这里。