理论:
ELK特点:
处理方式灵活;检索性搞笑;配置简单;集群现行扩展;前端操作多样。
ELK Stack的组成
通常情况下的ELK是由Elasticsearch、Logstash和Kibana组成
- L:信息的收集,主要是对日志进行搜集、分析、过滤,支持大量数据的获取,一般为c/s架构,,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
- E(Elasticsearch)作为数据的保存者,保存来自L(Logstash)收集的系统日志数据,并建立索引,以及提供之后对数据的检索。
- K(Kibana)作为展示者,主要是将ES上的数据通过页面可视化的形式展现出来。包括可以通过语句查询、安装插件对指标进行可视化等。
Elasticsearch
是基于LUCENE的搜索服务,提供搜索、分析、存储数据三大功能,是一个属于文本数据库,具有强大的搜索功能,相比与mysql搜索速度更加快捷。
Elasticsearch的特点:
ES数据架构(与关系型数据库mysql对比
Mysql | Elasticsearch |
Database | Index |
Table | Type |
Row | Document |
Column | Field |
Schema | Mapping |
Index | Everything is indexed |
SQL | Query DSL |
SELECT * FROM table | GET http://...... |
UPDATE table SET | PUT http://....... |
- 关系型数据库中的数据库(DataBase),等价于ES中的索引(Index)
- 一个数据库下面有N张表(Table),等价于1个索引Index下面有N多类型(Type),
- 一个数据库表(Table)下的数据由多行(ROW)多列(column,属性)组成,等价于1个Type由多个文档(Document)和多Field组成。
- 在一个关系型数据库里面,schema定义了表、每个表的字段,还有表和字段之间的关系。 与之对应的,在ES中:Mapping定义索引下的Type的字段处理规则,即索引如何建立、索引类型、是否保存原始索引JSON文档、是否压缩原始JSON文档、是否需要分词处理、如何进行分词处理等。
- 在数据库中的增insert、删delete、改update、查search操作等价于ES中的增PUT/POST、删Delete、改_update、查GET.
kibana:
属于前端日志只能是框架,可以详细的将日志转化为各种图标,为用户提供强大的数据可视化。
Redis、Kafka和Rabbitmq的对比
Redis是一个高性能的key-value数据库,多用于实时性较高的消息推送,并不保证可靠。redis的特征就是快,由于其数据是存储在内存中的,处理速度相对另外两者快了不少。通过使用redis可以实现一个简单具有实时通信功能的聊天室。
Kafka是一种分布式的,基于发布/订阅的消息系统。它遵从一般的MQ结构,producer,broker,consumer,以consumer为中心,消息的消费信息保存的客户端consumer上,consumer根据消费的点,从broker上批量pull数据;无消息确认机制。Kafka开发语言为Scala,支持跨平台。Kafka具有分布式高可扩展。性能。容错。高吞吐量。
RabbitMQ是开源,由以高性能、可伸缩性出名的Erlang写成。RabbitMQ的broker由Exchange,Binding,queue组成,其中exchange和binding组成了消息的路由键;客户端Producer通过连接channel和server进行通信,Consumer从queue获取消息进行消费(长连接,queue有消息会推送到consumer端,consumer循环从输入流读取数据)。rabbitMQ以broker为中心;有消息的确认机制。RabbitMQ Server适用的OS有:Windows、Linux/Unix和Mac OS X。
交换器(Exchange):它是发送消息的实体
队列(Queue):它是接收消息的实体
绑定器(Bind):将交换器和队列连接起来,并且封装消息的路由信息
rabbitMQ在吞吐量方面稍逊于kafka,他们的出发点不一样,rabbitMQ支持对消息的可靠的传递,支持事务,不支持批量的操作;基于存储的可靠性的要求存储可以采用内存或者硬盘。
Logstash:
主要是用来日志的搜集、分析、过滤日志的工具。用于管理日志和事件的工具,你可以用它去收集日志、转换日志、解析日志并将他们作为数据提供给其它模块调用,例如搜索、存储等。
Kafka
数据缓冲队列。作为消息队列解耦合处理过程,同时提高了可扩展性。具有峰值处理能力,使用消息队列能够使关键组件顶住突发的访问压力,而不会因为突发的超负荷的请求而完全崩溃。
- 1.发布和订阅记录流,类似于消息队列或企业消息传递系统。
- 2.以容错持久的方式存储记录流。
- 3.处理记录发生的流。
Filebeat:
隶属于Beats,轻量级数据收集引擎。基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat就是新版的 Logstash-fowarder,也会是 ELK Stack 在 Agent 的第一选择,目前Beats包含四种工具:
- 1.Packetbeat(搜集网络流量数据)
- 2.Metricbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据。通过从操作系统和服务收集指标,帮助您监控服务器及其托管的服务。)
- 3.Filebeat(搜集文件数据)
- 4.Winlogbeat(搜集 Windows 事件日志数据)
操作:
Elasticsearch集群部署
服务器最低要求
安装软件 | 主机名 | IP地址 | 系统版本 | 配置 |
---|---|---|---|---|
Elasticsearch | Es1 | 10.35.186.120 | centos7.5.1804 | 2核4G |
Elasticsearch | Es1 | 10.35.186.154 | centos7.5.1804 | 2核3G |
Elasticsearch | Es2 | 10.35.186.155 | centos7.5.1804 | 2核3G |
此次安装版本为:elasticsearch-7.13.2.tar.gz,版本属于5以上,不需要另外安装java。
创建es普通用户并配置密码
useradd es
echo "123" |passwd --stdin "es"
安装配置ES
tar zxvf /usr/local/package/elasticsearch-7.13.2-linux-x86_64.tar.gz -C /usr/local/
mv /usr/local/elasticsearch-7.13.2 /usr/local/es
vim /usr/local/es/config/elasticsearch.yml
cluster.name: bjbpe01-elk
cluster.initial_master_nodes: ["192.168.1.101","192.168.1.102","192.168.1.103"] # 单节点模式这里的地址只填写本机地址
node.name: elk01
node.master: true
node.data: true
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/logs
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
network.host: 0.0.0.0
http.port: 9200
transport.tcp.port: 9300
# 单节点模式下,将discovery开头的行注释
discovery.seed_hosts: ["192.168.1.102","192.168.1.103"]
discovery.zen.minimum_master_nodes: 2
discovery.zen.ping_timeout: 150s
discovery.zen.fd.ping_retries: 10
client.transport.ping_timeout: 60s
http.cors.enabled: true
http.cors.allow-origin: "*"
各个配置的含义:
cluster.name 集群名称,各节点配成相同的集群名称。
cluster.initial_master_nodes 集群ip,默认为空,如果为空则加入现有集群,第一次需配置
node.name 节点名称,各节点配置不同。
node.master 指示某个节点是否符合成为主节点的条件。
node.data 指示节点是否为数据节点。数据节点包含并管理索引的一部分。
path.data 数据存储目录。
path.logs 日志存储目录。
bootstrap.memory_lock 内存锁定,是否禁用交换,测试环境建议改为false。
bootstrap.system_call_filter 系统调用过滤器。
network.host 绑定节点IP。
http.port rest api端口。
discovery.seed_hosts 提供其他 Elasticsearch 服务节点的单点广播发现功能,这里填写除了本机的其他ip
discovery.zen.minimum_master_nodes 集群中可工作的具有Master节点资格的最小数量,官方的推荐值是(N/2)+1,其中N是具有master资格的节点的数量。
discovery.zen.ping_timeout 节点在发现过程中的等待时间。
discovery.zen.fd.ping_retries 节点发现重试次数。
http.cors.enabled 是否允许跨源 REST 请求,用于允许head插件访问ES。
http.cors.allow-origin 允许的源地址。
设置JVM堆大小 #7.0默认为4G
sed -i 's/## -Xms4g/-Xms4g/' /usr/local/es/config/jvm.options
sed -i 's/## -Xmx4g/-Xmx4g/' /usr/local/es/config/jvm.options
创建ES数据及日志存储目录
mkdir -p /data/elasticsearch/{}data,logs}
修改安装目录及存储目录权限
chown -R es.es /data/elasticsearch && chown -R es.es /usr/local/es
增加最大文件打开数/进程数/内存映射数
echo "* soft nofile 65536" >> /etc/security/limits.conf
echo "* soft nproc 65536" >> /etc/security/limits.conf
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
刷新文件
sysctl -p
启动ES:
su - es -c "cd /usr/local/es && nohup bin/elasticsearch &"
安装配置head监控插件
安装node
wget https://npm.taobao.org/mirrors/node/latest-v10.x/node-v10.0.0-linux-x64.tar.gz
tar -zxf node-v10.0.0-linux-x64.tar.gz -C /usr/local
echo "
NODE_HOME=/usr/local/node-v10.0.0-linux-x64
PATH=\$NODE_HOME/bin:\$PATH
export NODE_HOME PATH
" >>/etc/profile
source /etc/profile
检查node版本号
node --version
下载head插件
wget https://github.com/mobz/elasticsearch-head/archive/master.zip
unzip -d /usr/local elasticsearch-head-master.zip
安装grunt
cd /usr/local/elasticsearch-head-master
npm install -g grunt-cli
grunt -version
修改head源码
sed -i "s/keepalive: true/keepalive: true,/" /usr/local/elasticsearch-head-master/Gruntfile.js
sed -ir "s/keepalive: true,/hostname:"*"/"/usr/local/elasticsearch-head-master/Gruntfile.js
sed -i "s#http://localhost:9200#http://10.35.186.120:9200#" /usr/local/elasticsearch-head-master/_site/app.js
下载head必要的文件
wget https://github.com/Medium/phantomjs/releases/download/v2.1.1/phantomjs-2.1.1-linux-x86_64.tar.bz2
yum -y install bzip2
mkdir /tmp/phantomjs
mv phantomjs-2.1.1-linux-x86_64.tar.bz2 /tmp/phantomjs/
chmod 777 /tmp/phantomjs -R
运行head
cd /usr/local/elasticsearch-head-master/
npm install phantomjs-prebuilt@2.1.16 --ignore-scripts
npm install
nohup /usr/local/elasticsearch-head-master/grunt server &
ss -tnlp
运行 pm install 出现错误时候,用npm install phantomjs-prebuilt@2.1.16 --ignore-scripts执行 。
Kibana部署
安装
tar zxf kibana-7.13.2-linux-x86_64.tar.gz -C /usr/local/
配置
echo '
server.port: 5601
server.host: "10.3.145.14" #修改为安装机器的ip
elasticsearch.hosts: ["http://10.3.145.14:9200"] #需要配置的为安装机器的ip
kibana.index: ".kibana"
i18n.locale: "zh-CN"
'>>/usr/local/kibana-7.13.2-linux-x86_64/config/kibana.yml
server.port kibana服务端口,默认5601
server.host kibana主机IP地址,默认localhost
elasticsearch.url 用来做查询的ES节点的URL,默认http://localhost:9200
kibana.index kibana在Elasticsearch中使用索引来存储保存的searches, visualizations和dashboards,默认.kibana
启动
/usr/local/kibana-7.13.2-linux-x86_64/nohup/bin/kibana &
Logstash部署
安装
tar zxf /usr/local/package/logstash-7.13.2.tar.gz -C /usr/local/
mv /usr/local/logstash-7.13.2 /usr/local/logstash
创建测试文档
mkdir -p /usr/local/logstash/conf
测试文件内容:
vim /usr/local/logstash/conf/logshash.conf
input {
tcp {
port => 8888
}
}
filter {
grok {
match => {"message" => "%{DATA:key} %{NUMBER:value:int}"}
}
}
output {
stdout {
codec => rubydebug
}
elasticsearch {
hosts => ["10.3.145.14","10.3.145.56","10.3.145.57"]
index => 'logstash-debug-%{+YYYY-MM-dd}'
}
}
测试2:直接传输nginx的日志文件,要求nginx和logstash在同一台服务器上
input {
file {
type => "nginx-log"
path => "/var/log/nginx/error.log"
start_position => "beginning"
}
}
filter {
grok {
match => { "message" => '%{DATESTAMP:date} [%{WORD:level}] %{DATA:msg} client: %{IPV4:cip},%{DATA}"%{DATA:url}"%{DATA}"%{IPV4:host}"'}
}
date {
match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
}
}
output {
if [type] == "nginx-log" {
elasticsearch {
hosts => ["192.168.249.139:9200","192.168.249.149:9200","192.168.249.159:9200"]
index => 'logstash-audit_log-%{+YYYY-MM-dd}'
}
}
}
#标准输入
input {
tcp {
port => 8888 #输入内容的ip识别端口
}
}
filter {
grok {
match => {"message" => "%{DATA:key} %{NUMBER:value:int}"} #正则表达式,message为输入内容识别,"%{DATA:key} %{NUMBER:value:int}"创建识别日志的分段方式和每段的自定义名称,DATA正则表达式,key 自定义名称。
}
}#标准输出
output {
stdout {
codec => rubydebug
}
elasticsearch {
hosts => ["10.3.145.14","10.3.145.56","10.3.145.57"] #需要识别接收输入内容的ip
index => 'logstash-debug-%{+YYYY-MM-dd}' #日志上传后的分类名称,这个可以根据上传的日志进行更改。
}
}
启动logstash
/usr/local/logstash/bin/logstash -f /usr/local/logstash/conf/
备注:启动logstash需要再es和kibana/head启动的情况下启动。
日志传输方式
在需要将服务器上的日志进行上传的服务器上,使用
cat /var/log/mysql.log | nc 10.35.186.230 8888
效果:
正则表达式的常用内容记录
正则表达式 | 具体表达式内容 |
USERNAME | [a-zA-Z0-9._-]+ |
USER | %{USERNAME} |
INT | (?:[+-]?(?:[0-9]+)) |
BASE10NUM | (?<![0-9.+-])(?>[+-]?(?:(?:[0-9]+(?:\.[0-9]+)?)|(?:\.[0-9]+))) |
NUMBER | (?:%{BASE10NUM}) |
BASE16NUM | (?<![0-9A-Fa-f])(?:[+-]?(?:0x)?(?:[0-9A-Fa-f]+)) |
BASE16FLOAT | \b(?<![0-9A-Fa-f.])(?:[+-]?(?:0x)?(?:(?:[0-9A-Fa-f]+(?:\.[0-9A-Fa-f]*)?)|(?:\.[0-9A-Fa-f]+)))\b |
POSINT | \b(?:[1-9][0-9]*)\b |
NONNEGINT | \b(?:[0-9]+)\b |
WORD | \b\w+\b 字符串 |
NOTSPACE | \S+ 数字 |
SPACE | \s* |
DATA | .*? |
GREEDYDATA | .* |
QUOTEDSTRING | (?>(?<!\\)(?>"(?>\\.|[^\\"]+)+"|""|(?>'(?>\\.|[^\\']+)+')|''|(?>`(?>\\.|[^\\`]+)+`)|``)) |
UUID | [A-Fa-f0-9]{8}-(?:[A-Fa-f0-9]{4}-){3}[A-Fa-f0-9]{12} |
MAC | (?:%{CISCOMAC}|%{WINDOWSMAC}|%{COMMONMAC}) |
CISCOMAC | (?:(?:[A-Fa-f0-9]{4}\.){2}[A-Fa-f0-9]{4}) |
WINDOWSMAC | (?:(?:[A-Fa-f0-9]{2}-){5}[A-Fa-f0-9]{2}) |
COMMONMAC | (?:(?:[A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2}) |
IPV6 | ((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)? |
IPV4 | (?<![0-9])(?:(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2}))(?![0-9]) |
IP (?:%{IPV6}|%{IPV4}) | |
HOSTNAME | \b(?:[0-9A-Za-z][0-9A-Za-z-]{0,62})(?:\.(?:[0-9A-Za-z][0-9A-Za-z-]{0,62}))*(\.?|\b) |
HOST | %{HOSTNAME} |
IPORHOST | (?:%{HOSTNAME}|%{IP}) |
HOSTPORT | %{IPORHOST}:%{POSINT} |
# paths | |
PATH | (?:%{UNIXPATH}|%{WINPATH}) |
UNIXPATH | (?>/(?>[\w_%!$:.,-]+|\\.)*)+ |
TTY | (?:/dev/(pts|tty([pq])?)(\w+)?/?(?:[0-9]+)) |
WINPATH | (?>[A-Za-z]+:|\\)(?:\[^\\?*]*)+ |
URIPROTO | [A-Za-z]+(\+[A-Za-z+]+)? |
URIHOST | %{IPORHOST}(?::%{POSINT:port})? |
URIPATH | (?:/[A-Za-z0-9$.+!*'(){},~:;=#%_\-]*)+ |
URIPARAM | \?[A-Za-z0-9$.+!*'|(){},~#%&/=:;_?\-[]]* |
URIPATHPARAM | %{URIPATH}(?:%{URIPARAM})? |
URI | %{URIPROTO}://(?:%{USER}(?::[^]*)? |
MONTH | \b(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\b |
MONTHNUM | (?:0?[1-9]|1[0-2]) |
MONTHNUM2 | (?:0[1-9]|1[0-2]) |
MONTHDAY | (?:(?:0[1-9])|(?:[12][0-9])|(?:3[01])|[1-9]) |
DAY | (?:Mon(?:day)?|Tue(?:sday)?|Wed(?:nesday)?|Thu(?:rsday)?|Fri(?:day)?|Sat(?:urday)?|Sun(?:day)?) |
YEAR | (?>\d\d){1,2} |
HOUR | (?:2[0123]|[01]?[0-9]) |
MINUTE | (?:[0-5][0-9]) |
SECOND | (?:(?:[0-5]?[0-9]|60)(?:[:.,][0-9]+)?) |
TIME | (?!<[0-9])%{HOUR}:%{MINUTE}(?::%{SECOND})(?![0-9]) |
DATE_US | %{MONTHNUM}[/-]%{MONTHDAY}[/-]%{YEAR} |
DATE_EU | %{MONTHDAY}[./-]%{MONTHNUM}[./-]%{YEAR} |
ISO8601_TIMEZONE | (?:Z|[+-]%{HOUR}(?::?%{MINUTE})) |
ISO8601_SECOND | (?:%{SECOND}|60) |
TIMESTAMP_ISO8601 | %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}? |
DATE | %{DATE_US}|%{DATE_EU} |
DATESTAMP | %{DATE}[- ]%{TIME} |
TZ | (?:[PMCE][SD]T|UTC) |
DATESTAMP_RFC822 | %{DAY} %{MONTH} %{MONTHDAY} %{YEAR} %{TIME} %{TZ} |
DATESTAMP_RFC2822 | %{DAY}, %{MONTHDAY} %{MONTH} %{YEAR} %{TIME} %{ISO8601_TIMEZONE} |
DATESTAMP_OTHER | %{DAY} %{MONTH} %{MONTHDAY} %{TIME} %{TZ} %{YEAR} |
DATESTAMP_EVENTLOG | %{YEAR}%{MONTHNUM2}%{MONTHDAY}%{HOUR}%{MINUTE}%{SECOND} |
SYSLOGTIMESTAMP | %{MONTH} +%{MONTHDAY} %{TIME} |
PROG | (?:[\w._/%-]+) |
SYSLOGPROG | %{PROG:program}(?:[%{POSINT:pid}])? |
SYSLOGHOST | %{IPORHOST} |
SYSLOGFACILITY | <%{NONNEGINT:facility}.%{NONNEGINT:priority}> |
HTTPDATE | %{MONTHDAY}/%{MONTH}/%{YEAR}:%{TIME} %{INT} |
QS | %{QUOTEDSTRING} |
SYSLOGBASE | %{SYSLOGTIMESTAMP:timestamp} (?:%{SYSLOGFACILITY} )?%{SYSLOGHOST:logsource} %{SYSLOGPROG}: |
COMMONAPACHELOG | %{IPORHOST:clientip} %{USER:ident} %{USER:auth} [%{HTTPDATE:timestamp}] "(?:%{WORD:verb} %{NOTSPACE:request}(?: HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{NUMBER:bytes}|-) |
COMBINEDAPACHELOG | %{COMMONAPACHELOG} %{QS:referrer} %{QS:agent} |
LOGLEVEL | ([Aa]lert|ALERT|[Tt]race|TRACE|[Dd]ebug|DEBUG|[Nn]otice|NOTICE|[Ii]nfo|INFO|[Ww]arn?(?:ing)?|WARN?(?:ING)?|[Ee]rr?(?:or)?|ERR?(?:OR)?|[Cc]rit?(?:ical)?|CRIT?(?:ICAL)?|[Ff]atal|FATAL|[Ss]evere|SEVERE|EMERG(?:ENCY)?|[Ee]merg(?:ency)?) |
常见问题解决:
ES启动过程中存在错误
错误1:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
解决:切换到root用户
vim /etc/security/limits.conf hard nofile 65536 hard nproc 65536
重新启动elasticsearch,还是无效?
必须重新登录启动elasticsearch的账户才可以,例如我的账户名是elasticsearch,退出重新登录。
另外*也可以换为启动elasticsearch的账户也可以,* 代表所有,其实比较不合适
错误2:max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
解决:elasticsearch用户拥有的内存权限太小了,至少需要262114
sysctl -w vm.max_map_count=262144
错误3:
解决:JVM堆内存太大造成机器无法正常启动,设置的最小堆内存为3G
sed -i 's/## -Xms4g/-Xms3g/' /usr/local/es/config/jvm.options
sed -i 's/## -Xmx4g/-Xmx3g/' /usr/local/es/config/jvm.options
启动grunt中存在的问题
问题:(图片丢失)提示npm版本过低,但是通过npm install -g npm@latest升级失败
解决:换个网络,网速过慢导致下载失败,失败造成错误报错。
脚本逻辑:
此程序不能使用单一的shell脚本进行相应应用的安装和启动,需要使用shell和ansible相结合使用。
应用服务
实验中所用到的所有应用服务的压缩包
链接:https://pan.baidu.com/s/1QyRd0IK5b84ikIFTfXpK9A
提取码:6543