最近参照一些教程安装了elk系统,用于数据分析之用,遇到了一些坑,记录如下。
elk的安装包括ElasticSearch、Logstash和Kiabana三个开源工具,以及一些依赖。当然基于elk的扩展插件很多,这次只是安装最基本的elk,并且都是在本机器运行,基于centos7。
一,Elasticsearch是用Java开发的,因此需要安装java环境,需要1.7以上的版本。 @H_403_5@ 1,安装jdk,yum install -y java-1.8.0
。 @H_403_5@ 2,通过java -version
,得到如下信息:
openjdk version "1.8.0_77"
OpenJDK Runtime Environment (build 1.8.0_77-b03)
OpenJDK 64-Bit Server VM (build 25.77-b03,mixed mode)
表示jdk环境安装成功。
二,一般的centos系统中的yum源是没有elk相关链接,因此需要加入elk相关组件链接。
1,新建yum源 vim /etc/yum.repos.d/elasticsearch.repo
并在elasticsearch.repo文件中增加内容如下:
name=Elasticsearch repository for5.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
2,导入elasticsearch PGP key,主要作用是验证签名,防止软件在传输的过程中被篡改。rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
,然后就可以通过yum 命令安装elk了。
3,安装elasticsearch
yum install elasticsearch -y
systemctl daemon-reload
systemctl enable elasticsearch.service
4,修改 elasticsearch配置文件。通过如下命令查看elasticsearch.yml中生效的内容grep -v ^# /etc/elasticsearch/elasticsearch.yml
,安装完成后是没有啥配置的,为空,添加如下的配置:
cluster.name: elk
node.name: elk-node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 127.0.0.1
http.port: 9200
通过grep -v ^# /etc/elasticsearch/elasticsearch.yml
即可查看到上述内容,上述配置表示elasticsearch监听本机的9200端口。 @H_403_5@ 5,测试elasticsearch 是否配置成功curl -X GET http://127.0.0.1:9200
{
"name" : "elk-node-1","cluster_name" : "elk","cluster_uuid" : "9rc3La6HTNuWQCXv5uueEw","version" : { "number" : "5.6.5","build_hash" : "6a37571","build_date" : "2017-12-04T07:50:10.466Z","build_snapshot" : false,"lucene_version" : "6.6.1" },"tagline" : "You Know,for Search" }
有上述内容表示elasticsearch安装成功。
三,安装logstash @H_403_5@ 1,yum install -y logstash
@H_403_5@ 2,查看logstash 配置文件:grep -v ^# /etc/logstash/logstash.yml
,安装好之后的配置如下:
path.data: /var/lib/logstash
path.config: /etc/logstash/conf.d
path.logs: /var/log/logstash
3,添加pipeline文件,该文件的作用是告诉 logstash从何处读取数据文件,以及将收集到的数据输出到何处:vim /etc/logstash/conf.d/messages.conf
input {
file {
path => "/var/log/my"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts => ["127.0.0.1:9200"]
index => "wireshark-%{+YYYY.MM.dd}"
}
stdout {
# codec => rubydebug
}
}
该配置文件表示收集读取本机的/var/log/my.csv
文件的数据,my.csv即我们自己生成的数据文件;然后传送给本机器 9200端口的elasticsearch。wireshark-这个索引在后面会用到。这里面需要注意的一点是/var/log/my该文件的权限问题,要保证 logstash程序有权限读取该文件,当然通常/var/log/目录下都是有读取权限的,当然logstash程序也要有权限读取/etc/logstash/conf.d/messages.conf文件。因此设置如下:
chown -R logstash:logstash /etc/logstash/conf.d/
chmod 777 /var/log/my
后面的测试如果不同,多半是文件权限的问题。 @H_403_5@ 4,测试logstash服务是否启动:curl -X GET http://127.0.0.1:9600
{"host":"a23204697","version":"5.6.5","http_address":"127.0.0.1:9600","id":"94997ca8-f6f7-4b1a-bfee-604f3a42f083","name":"a23204697","build_date":"2017-12-04T08:53:30+00:00","build_sha":"f8021dbc695fbe67cf91338b46a362a9036918cb","build_snapshot":false}
查看9600端口是否处于监听状态,netstat -anlp | grep 9600
5,测试logstash和 elasticsearch之间是否能够互通:
mkdir -p /usr/share/logstash/config/
ln -s /etc/logstash/* /usr/share/logstash/config
chown -R logstash:logstash /usr/share/logstash/config/
cd /usr/share/logstash/
systemctl restart logstash
systemctl enable logstash.service//添加开机自启
bin/logstash -e 'input { stdin { } } output { stdout {} }'
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
最终如果bin/logstash -f test-system.conf -t
,有如下返回,表明logstash和 elasticsearch之间能够联通。
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
三,安装kibana @H_403_5@ 1,yum install -y kinaba
@H_403_5@ 2,添加如下配置,可以通过grep -v ^# /etc/kibana/kibana.yml
查看:
server.port: 5601
server.host: "127.0.0.1"
elasticsearch.url: "http://127.0.0.1:9200"
systemctl restart kibana
表示kibana会从本机器的9200端口读取数据,也就是elasticsearch那里,elasticsearch数据来源就是上述 logstash程序收集而来。因为elk的设计是集群,因此本地使用看不出来。
3,测试kibana服务是否启动netstat -anplut |grep :5601
,查看5601端口是否处于监听状态,或者curl -X GET http://127.0.0.1:5601
<script>var hashRoute = '/app/kibana';
var defaultRoute = '/app/kibana';
var hash = window.location.hash;
if (hash.length) {
window.location = hashRoute + hash;
} else {
window.location = defaultRoute;
由上述返回,表示kibana安装成功
四,数据展示问题,如何将我们的数据在kibana展示,后面会进行总结。